Zeilenzähler

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Lupus.

    Hey, ich versuche grade sowas wie ein "Zeilenzähler" zu programmieren.
    Ich brauch das für mein Programm.

    VB.NET-Quellcode

    1. Dim a As Single
    2. Dim zeile() As String = IO.File.ReadAllLines("test.horst")
    3. Dim anzahl As Integer
    4. For a = 0 To 9999
    5. If zeile(a).Length < 1 Then
    6. anzahl = a - 1
    7. Exit For
    8. End If
    9. a = a + 1
    10. Next
    11. MsgBox(anzahl)
    12. End Sub

    Nur er sagt mir hier immer "Der Index war ausserhalb des Arrayberecihes" :
    If zeile(a).Length < 1 Then

    Warum?
    Und nebenbei...gibts ne einfachare Metohde die Zeilenanzahl einer txt zu bekommen?:D:D

    Chris

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Metal Freak“ ()

    Hi,
    versuchs mal so:

    VB.NET-Quellcode

    1. Dim Datei As New IO.StreamReader("test.horst")
    2. Dim Anzahl As Integer = 0
    3. Do
    4. Anzahl += 1
    5. Loop Until Datei.EndOfStream
    6. MsgBox(Anzahl)

    vG
    Lupus

    /edit: Ups, habs Datei.Close vergessen :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lupus“ ()

    Hey, Danke =)
    Funktioniert 1A :D

    So, nun zum nächsten Problem :D
    Also, bin dabei nen kleinen Bot zu schreiben, mit dem man reden kann & so ^^

    VB.NET-Quellcode

    1. Dim a As Integer = 0
    2. Dim re() As String = Nothing
    3. Dim b As Integer = 0
    4. Dim c As Integer = 0
    5. Dim resplit() As String = Nothing
    6. Dim fragesplit() As String = Nothing
    7. Dim zeilen() As String = IO.File.ReadAllLines("test.horst")
    8. Dim Anzahl As Integer = zeilen.Length
    9. Dim resplitl As Integer
    10. fragesplit = TextBox1.Text.Split(" ")
    11. Dim Splitl As Integer = TextBox1.Text.Split.Length
    12. Do
    13. Do
    14. re = zeilen(a).Split("|")
    15. resplit = re(1).Split(",")
    16. resplitl = resplit.Length
    17. If fragesplit(b) = resplit(c) Then
    18. ListBox1.Items.Add(re(0))
    19. Exit Do
    20. End If
    21. c = c + 1
    22. a = a + 1
    23. Loop Until resplitl = c And Anzahl = a
    24. a = 0
    25. b = b + 1
    26. Loop Until b = Splitl
    27. b = 0

    Also was er bis her machen sollte:
    Den Textbox.Text splitten.
    Jede Zeile Aus der .horst splitten.
    Den 2. Teil der gesplitteten .horst Zeile, wieder Splitten.
    Die Textbox-Splitte mit den Splitten des 2. teiles von .horst Zeile vergleichen, wenn einstimmig, eine neues Item der Listbox machen erstelen, mit der "Antwort".
    Wenn nicht, das nächste Wort der Textbox usw.

    Was mache ich falsch?
    Der Complier makiert immer "re = zeilen(a).Split("|")" Falsch mit der Ausssage:
    Der Index war außerhalb des Arraybereichs.

    Chris

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Metal Freak“ ()

    bei der Länge (lenght) von einem Array wird immer bei 1 angefangen zu zählen, beim Array allerdings mit 0. Deswegen ist Zeilen.Lenght immer 1 größer als der Array. Versuch mal, statt Anzahl = a Anzahl - 1 = a (ich denke das gleiche müsste auch für das resplitl passieren...)
    Ich hab jetzt nochmal ganz von vorne damit angefangen.
    Hier mein Quelltext:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim um As Integer = 0
    3. Dim hfs As Integer = 0
    4. Dim htl As Integer = 0
    5. Dim horsttextS() As String
    6. Dim horstfrage As String
    7. Dim horstantwort As String
    8. Dim usermessageS() As String
    9. Dim horsttext() As String
    10. Dim horstfrageS() As String
    11. Dim horstfrageSl As String
    12. Dim ende As Boolean = False
    13. Dim usermessageSl As String
    14. Dim horsttextl As String
    15. horsttext = IO.File.ReadAllLines("test.horst")
    16. horsttextl = horsttext.Length
    17. horsttextS = horsttext.ToString.Split("|")
    18. horstantwort = horsttextS(0)
    19. horstfrage = horsttext(1)
    20. horstfrageS = horstfrage.Split(",")
    21. horstfrageSl = horstfrageS.Length
    22. usermessageS = TextBox1.Text.Split(" ")
    23. usermessageSl = usermessageS.Length
    24. Do
    25. Do
    26. Do
    27. If usermessageS(um) = horstfrageS(hfs) Then
    28. ListBox1.Items.Add(horstantwort)
    29. ende = True
    30. htl = 0
    31. hfs = 0
    32. um = 0
    33. Exit Do
    34. End If
    35. hfs += 1
    36. Loop Until hfs - 1 = horstfrageSl - 1
    37. If ende = True Then
    38. htl = 0
    39. hfs = 0
    40. um = 0
    41. Exit Do
    42. End If
    43. um += 1
    44. Loop Until um - 1 = usermessageSl - 1
    45. If ende = True Then
    46. htl = 0
    47. hfs = 0
    48. um = 0
    49. Exit Do
    50. End If
    51. htl += 1
    52. Loop Until htl - 1 = horsttextl - 1
    53. htl = 0
    54. hfs = 0
    55. um = 0
    56. End Sub

    Nur das ist noch ziemlich verbuggt, und das ganze funktiniert einfach nicht.
    Hier nochmal meine test.horst:

    Gut und dir?|Wie gehts,gehts,wie gehts,geht es dir
    Ja. Schon seit gestern.|Wusstest,wusstest

    Was ich damit erreichen will:
    Die "test.horst" wird geladen.
    Jede Zeile wird geteilt.
    Der Teil1 steht vor dem "|", also die Antwort.
    Teil 2 nach dem "|", das sind die Schlüsselwörter.
    Die Schlüsselwörter werden von einander getrennt mit ","
    man schreibt nun z.B "Hey Horst wie gehts?" in ein Textfeld, drückt auf den Button.
    Jetzt wird Der TextfeldText gesplittet, und zwar zwischen jedem " " (Leerzeichen).
    Jetzt wird jeder Split des Textfeldes mit jedem Schlüsselworts jeder Zeile verglichen.
    Sollten Textfled Split und Schlüsselwort identisch sein, so wird die Antwort der Zeile wo das Schlüsselwort steht, als neues Item einer Listbox geaddet.

    Kann jemand mein Quelltext so umschreiben dass das funktionier, oder gar alles von vorne machen.

    Wäre echt seeeehr dankbar dafür!!!

    MfG Chris.
    Hi Chris,
    ich hab mal von vorne angefangen mit deiner Beschreibung (bei deinem Code hab ich nich durchgeblickt :D ), ich hoffe, das ist das, was du brauchst. Ich habs bei mir auch schon getestet, es funktioniert.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Vergleichsw(99, 99) As String
    3. Dim Datei As New IO.StreamReader("test.horst")
    4. Dim a As Integer = 0, b As String = ""
    5. Do
    6. b = Datei.ReadLine
    7. Vergleichsw(a, 0) = b.Split("|")(0)
    8. Dim d As Integer = 0
    9. For Each c As String In b.Split("|")(1).Split(",")
    10. d += 1
    11. Vergleichsw(a, d) = c
    12. Next
    13. a += 1
    14. Loop Until Datei.EndOfStream
    15. Datei.Close()
    16. Dim Textf() As String = TextBox1.Text.Split(" ")
    17. For Each c As String In Textf
    18. For a = 0 To 99
    19. If Vergleichsw(a, 0) = "" Then Exit For
    20. For d As Single = 1 To 99
    21. If Vergleichsw(a, d) = "" Then Exit For
    22. If Vergleichsw(a, d).ToLower = c.ToLower Then
    23. ListBox1.Items.Add(Vergleichsw(a, 0))
    24. Exit Sub
    25. End If
    26. Next
    27. Next
    28. Next
    29. End Sub

    vG,
    Lupus
    Erstmal großes Danke.
    Ich habe bei meinem Code auch nicht mehr so ganz durchgeschaut.
    Es funktioniert genau so wie ich es beschrieben habe.

    Nur mir ist grade etwas auf - bzw. eingefallen.
    Wenn ich als Keyword "Wie gehts" nehme, antwortet er mir nicht, wenn ich "Wie gehts" in die Textbox schriebe.
    Zurecht, da er ja immer nur ein Wort kontorlliert.
    Wäre es also möglich, das er, wenn er keine der einzelnen wörter der gesplitteten Textbox findet, auch Wörter zusammen nimmt?
    Also wenn ich schreibe "Wie gehts" soll er nicht nur "Wie" und "gehts" finden sondern halt wenn er davon nix findet in der .horst, einfach mal die Wörter zusammen ausprobiert.
    Nur wie sollte man das bei mehreren Wörtern machen? ^^
    "Hallo du Bot wie gehts es dir?"
    Hättest du die Zeit und Lust es mir so um zu schrieben?
    Jetzt aber erst nochmal ein großes "Danke" an dich ;)

    Chris.
    wow, das is nen bisschen komplizierter... aber ich setzt mich dran, des macht echt spaß :D

    /edit:
    doch nich so schwer, is sogar einfacher als vorher:

    VB.NET-Quellcode

    1. Dim Vergleichsw(99, 99) As String
    2. Dim Datei As New IO.StreamReader("test.horst")
    3. Dim a As Integer = 0, b As String = ""
    4. Do
    5. b = Datei.ReadLine
    6. Vergleichsw(a, 0) = b.Split("|")(0)
    7. Dim d As Integer = 0
    8. For Each c As String In b.Split("|")(1).Split(",")
    9. d += 1
    10. Vergleichsw(a, d) = c
    11. Next
    12. a += 1
    13. Loop Until Datei.EndOfStream
    14. Datei.Close()
    15. 'den splitter der Textbox rausgenommen, es werden nur noch die Wörter der Datei durchlaufen
    16. For a = 0 To 99
    17. If Vergleichsw(a, 0) = "" Then Exit For
    18. For d As Single = 1 To 99
    19. If Vergleichsw(a, d) = "" Then Exit For
    20. If TextBox1.Text.ToLower.Contains(Vergleichsw(a, d).ToLower) Then 'geändert
    21. ListBox1.Items.Add(Vergleichsw(a, 0))
    22. Exit Sub
    23. End If
    24. Next
    25. Next


    vG,
    Lupus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lupus“ ()