Problem: For Each Schleife

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von LaPi.

    Problem: For Each Schleife

    heyy,
    ich hab mir ein kleines programm zusammen gebastelt jedoch habe ich jetzt das problem, dass er beim ausführen das gewünschte ereigniss nur einmal ausführt und leider nur eine zufällige zeile aus meinem text dokument.
    bin mit meinem begrenzten latein am ende und hoffe hier kann mir jemand helfen :)

    VB.NET-Quellcode

    1. Imports System.Windows.Forms.SendKeys
    2. Imports System.IO
    3. Public Class SGG
    4. Dim Zahlen() As String
    5. Dim Zeile As String
    6. Dim Paar1, Paar2, Paar3 As String
    7. Dim r As New System.Random
    8. Dim Zufall As New System.Random
    9. Dim Zahlx As Integer
    10. Private Sub SGG_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    11. Zahlen = IO.File.ReadAllLines("C:\koords.txt")
    12. End Sub
    13. Private Sub TeilenBt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Start.Click
    14. 'Zeilen zählen
    15. Dim z As Integer = 0
    16. For Each Line As String In Zahlen
    17. z += 1
    18. Next
    19. Zeile = Zahlen(r.Next(0, z))
    20. Zahlx = Zufall.Next(6, 13)
    21. For b = 0 To Zahlx Step 1
    22. System.Threading.Thread.Sleep(1000)
    23. Next b
    24. Paar1 = Zeile.Substring(0, 2) 'Ab zeichen 0, 2 Zeichen lang
    25. Paar2 = Zeile.Substring(2, 3) 'Ab zeichen 2, 3 Zeichen lang
    26. Paar3 = Zeile.Substring(5, 2) 'Ab zeichen 5, 2 Zeichen lang
    27. txt1.Text = Paar1
    28. txt2.Text = Paar2
    29. txt3.Text = Paar3
    30. Rich1.Text = Paar1 & vbCrLf & Paar2 & vbCrLf & Paar3
    31. SendKeys.Send("{TAB}")
    32. SendKeys.Send("{TAB}")
    33. SendKeys.Send("{TAB}")
    34. SendKeys.Send(Paar1)
    35. SendKeys.Send("{TAB}")
    36. SendKeys.Send(Paar2)
    37. SendKeys.Send("{TAB}")
    38. SendKeys.Send(Paar3)
    39. SendKeys.Send("{TAB}")
    40. SendKeys.Send("{TAB}")
    41. SendKeys.Send("2500")
    42. SendKeys.Send("{TAB}")
    43. SendKeys.Send("{TAB}")
    44. SendKeys.Send("{TAB}")
    45. SendKeys.Send("{TAB}")
    46. SendKeys.Send("{TAB}")
    47. SendKeys.Send("{DOWN}")
    48. SendKeys.Send("{DOWN}")
    49. SendKeys.Send("{DOWN}")
    50. SendKeys.Send("{DOWN}")
    51. SendKeys.Send("{TAB}")
    52. SendKeys.Send("{ENTER}")
    53. SendKeys.Send("{F5}")
    54. End Sub
    55. End Class
    Was machst Du in Zeile 22-24: Du zählst nur den Zähler Z hoch. Dies geht auch einfacher Z=Zahlen.GetUpperBound(0)

    Was machst Du bei Zeile 30-32: Du läufst x mal durch die Warteschleife. Dies geht einfacher mit System.Threading.Thread.Sleep(1000 * Zahlx)

    Und in Zeile 26 wählst Du einmal einen zufälligen Eintrag aus Zahlen() aus, der dann weiter verarbeitet wird.
    Du musst mal überlegen, wo Deine Schleifen anfangen und aufhören sollen.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    hm zu zeile 26. wenn ich da das z einfach durch die zeilen nummer ändern würde in der es aufhört wie zb 105 so würde das nach meinem denken doch die schleife bis auf zeile 105 erweitern? naja halt nur in meinem denken geht ja auch nicht hehe... hoffe ich werde belehrt werden^^
    okay dann mach ichs anders.
    Ich habe nun den hier stehendeh code zwischen zeile 47 und 69. Nun möchte ich dass dieser code 20mal wiederholt wird, dann eine x min lange zeit pause macht und dann wieder nach 20 durchführungen eine pause macht.

    paar1, 2 und 3 lese ich aus einer datei heraus welche für paar1 die ersten 2 zeichen, für paar2 die 3 zeichen danach und für paar3 die 2 folgenden zeichen ließt. Nun möchte ich jedoch dass er mir auch die anderen Zeilen in richtiger reihenfolge runter ließt und nicht wie es bei mir ist irgendeine wahllose Zeile nimmt.

    Am besten den oberen code des codes ignorieren da meine flachen und bemühungen ja nicht mit viel erfolg gesegnet waren.

    Hoffe auf Hilfe nd anregungen :)

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Paar1, Paar2, Paar3 As String
    3. Dim i As Integer
    4. Dim DeineDatei() As String = IO.File.ReadAllLines("C:\Zahlen.txt")
    5. i = 0
    6. For Each Line In DeineDatei
    7. Paar1 = DeineDatei(i).Substring(0, 2)
    8. Paar2 = DeineDatei(i).Substring(2, 3)
    9. Paar3 = DeineDatei(i).Substring(5, 2)
    10. MsgBox(Paar1 & vbCrLf & Paar2 & vbCrLf & Paar3)
    11. i += 1
    12. Next
    13. End Sub


    Vielleicht können das mal andere probieren, bei mir klappt es ja einwandfrei...
    Wieso benutzt du eine For-Each-Schleife?

    Da könntest du auch eine For-Schleife benutzen:

    VB.NET-Quellcode

    1. For i As Integer = 0 To DeineDatei.Length - 1
    2. 'der restliche Code...
    3. Next


    Da brauchst du auch das i nicht immer um eins zu erhöhen.

    Außerdem ist das hier voll unnötig:

    VB.NET-Quellcode

    1. Dim i As Integer
    2. i = 0


    Das kannst du auch in einer Zeile zusammenfassen.

    MfG