Zeilen einer Liste in einer Listbox in Array's umwandeln

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Jiron.

    Zeilen einer Liste in einer Listbox in Array's umwandeln

    Hallo , ich wünsche bzw. hoffe ihr hattet alle schöne Feiertage.
    Ich selbst hab mich mal wieder an mein Vorhaben, bissel VB2010 programmieren zu lernen gesetzt. Aber leider bleib ich wieder am selben Problem hängen. Hab da einiges gelesen und versucht aber anscheinend nix verstanden. Habe zum Versuch das alte Thema Lottoprogramm aufgegriffen und möchte ein Array von 6 Zahlen mit einer Liste ( schon gezogenen Zahlenreihen ) die ich in eine Listbox geladen habe, zeilenweise vergleichen.
    In meinen hier stehenden Code habe ich den Vergleich in das Einlesen der Liste gesetzt, soll späterr aber raus, damit die Liste nicht immer wieder eingelesen werden muß. Ich denke mal, mein Programm läuft nicht, da die Liste ein String ist und ich mit Arrays arbeiten will. Nur bekomme ich es nicht hin die einzelnen Zeilen der Liste in Arrays zu verwandeln.

    Könntet ihr mir da bitte weiterhelfen.

    VB.NET-Quellcode

    1. Dim gl As Byte
    2. Dim nr2 As Integer
    3. Dim gefzr() As Byte = {z1, z2, z3, z4, z5, z6}
    4. Dim line2() As Byte = {gziz1, gziz2, gziz3, gziz4, gziz5, gziz6, gziz7}
    5. Dim pfad2 As String = ("gezoziehng0.txt")
    6. If File.Exists("gezoziehng0.txt") Then
    7. nr2 = 0
    8. For Each line2 In IO.File.ReadAllLines(pfad2)
    9. nr2 = nr2 + 1
    10. '--------------------------------------------
    11. ' Anfang vom Vergleich der schon gezogenen Ziehungsreihen
    12. For z = 0 To gefzr.GetUpperBound(0)
    13. For y = 0 To line2.GetUpperBound(0)
    14. If gefzr(z) = line2(y) Then
    15. gl += 1
    16. End If
    17. Next
    18. ' Ende vom Vergleich der schon gezogenen Ziehungsreihen
    19. '--------------------------------------------
    20. lstA2.Items.Add(nr2 & ": " & line2.ToArray())
    21. Next
    22. txtanzr.Text = nr2
    23. Else
    24. lstA.Items.Add("Datei - gezoziehng0.txt - nicht vorhanden")
    25. End If


    Ich hoffe den Programmcode diesesmal richtig hier eingesetzt zu haben.
    Da ich langsam ins Rentenalter komme gehts hier nicht um Hausaufgaben oder so, nur um meinen Dickkopf :)
    Danke euch schon mal .
    Gruß Jiron
    @Jiron Wenn die Zahlen (nimm Integer, nicht Byte) in einer List(Of Integer) liegen, kannst Du mit myList.Contains(n) prüfen, ob die Zahl enthalten ist oder nicht, da brauchst Du nur eine schleife.
    Die Werte aus der Datei musst Du in ein Integer konvertieren: Dim value = Integer.Parse(txt).Wenn Du nun noch scheibst, was die beiden Felder gefzr und line2 sowie die Datei enthalten, könnten wir den Algorithmus selbst unter die Lupe nehmen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Wenn Du nun noch scheibst, was die beiden Felder gefzr und line2 sowie die Datei enthalten, könnten wir den Algorithmus selbst unter die Lupe nehmen.


    Sehe ich auch so. Allgemein solltest du deine Variablen, Controls und alles andere auch sauber benennen. Für dich ist die Abkürzung "gefzr" sicher sehr eindeutig, ich hingegen hab keine Ahnung was das bedeuten soll. Stell dir vor an deinem Projekt arbeiten 20 Entwickler und jeder davon kommt alle 5 Min. um zu fragen was was ist ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo "RodFromGermany" und "mrMo"
    Ich danke euch für eure schnelle Hilfe und Hinweise.

    "RodFromGermany" - ich werde heute die Elemente in Integer umwandeln und mich mit myList.Contains(n) befassen. Wobei ich mich mit dem "Parse" schwer tue.
    Für beide mal kurz eine kurze Erklärung zu "gefzr" und "line2".
    gefzr() ist ein Array der im Programm "gefundene Ziehungsreihe" - 6 Ziehungszahlen, also z1 = Zahl1 , z2 = Zahl2 usw. , da nicht grösser als 49 habe ich Byte gewählt.
    line2() ist eine Zeile aus der Liste schon gezogenen Ziehungsreihen - eine Ziehungsreihe besteht in der Liste nur noch aus den 7 Zahlen ( Zahlen nicht grösser als 49 ), bei der Ausgabe in die Listbox steht dann nur noch die jeweilige Nr. den 7 Zahlen voraus. Wobei eine Ausgabe in die Listbox eigendlich nicht nötig ist. Ich weis nur nicht was besser ist - die Liste einlesen, in Listbox ausgeben und dann zum Vergleichen mit den neu gefundenen Ziehungsreihe immer die Reihen durchgehen, oder jedesmal die Liste einlesen und wie oben den Vergleich sofort dabei durchführen.
    "mrMo" Da ich eigendlich nur so für mich bissel programmieren möchte, hatte ich nicht an die anderen 19 Programmierer gedacht :) Aber du hast natürlich Recht, allgemeinverständliche Bezeichnungen vereinfachen da so manches. Ich werde das mal im Hinterkopf behalten .
    Danke noch mal euch beiden, ich mach mich mal ans umsetzen.
    Gruß Jiron

    Jiron schrieb:

    Wobei ich mich mit dem "Parse" schwer tue.
    Teste dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim txt1 = "42"
    3. Dim txt2 = "Ente mit Rotkraut"
    4. Dim i1 = Integer.Parse(txt1)
    5. Dim i2 As Integer = 0
    6. If Not Integer.TryParse(txt2, i2) Then
    7. i2 = 43
    8. End If
    9. MessageBox.Show(i1 & Environment.NewLine & i2)
    10. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo "RodFromGermany"
    Wollt mich mal kurz melden und mich bei dir für die Ausführungen zu Parse bedanken. Bin noch beim versuchen. Muß ich die eingelesene Zeile erst splitten, damit ich die eingelesene Zeile (line2) bzw. die einzelnen 7 Elemente ( Zahlen ) mit Pase ansprechen, umwandeln und dann als Array vergleichen kann ?
    Ich schaffe es einfach nicht die eingelesene 7 Elemente in der Zeile anzusprechen, damit ich damit was machen kann.
    Gruß Jiron
    @Jiron Poste mal so eine komplette Zeile.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo "RodFromGermany"
    Komme mir im moment nicht gerade schlau vor, das ist bestimmt ganz simbel.
    Die Datei "gezoziehng0.txt" ist im Prinzip nur eine Liste aus über 5500 Zeilen die folgendermasen aufgebaut ist: 6,19,25,30,33,42,0
    Und diese Reihen will ich einzeln mit den 6 Zahlen die im Array "gefzr()" stehen vergleichen.
    Hab hier 2 Bücher und mehrere Hefte über Vb2010 und niergends ist mal beschrieben wie man so ne Zeile umwandelt - nur wie man was dazu macht, weg nimmt oder ne Tabelle draus macht und so. Hier im Forum steht ja auch einiges, aber ich packe es nicht mir etwas daraus zusammen zubasteln um die Zeile anzusprechen.
    Gruß Jiron
    @Jiron So was:

    VB.NET-Quellcode

    1. Dim line = "6,19,25,30,33,42,0" ' Deine Zeile
    2. Dim parts() = line.Split(","c) ' die Elemente vereinzeln
    3. Dim ll = New List(Of Integer) ' Ziel: Integer-Liste
    4. For Each part In parts ' Schleife über all Elemente
    5. Dim value = Integer.Parse(part) ' nach Int konvertieren
    6. ll.Add(value) ' der Liste hinzufügen
    7. Next

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo "RodFromGermany"

    Ich hatte das mit dem splitten schon mal probiert. Zumindestens habe ich jetzt keine Fehlermeldung mehr. Das Programm läuft und die Liste wird einzeln eingelesen und in die Listbox geladen. Nur ein Vergleich findet nicht statt :(

    VB.NET-Quellcode

    1. Dim gleich, nr2 As Integer
    2. gleich = 0
    3. nr2 = 0
    4. Dim gefzr() As Integer = {z1, z2, z3, z4, z5, z6}
    5. Dim txt1 As String = 0
    6. Dim txt2 As String = 0
    7. Dim txt3 As String = 0
    8. Dim txt4 As String = 0
    9. Dim txt5 As String = 0
    10. Dim txt6 As String = 0
    11. Dim txt7 As String = 0
    12. Dim pfad2 As String = ("gezoziehng0.txt")
    13. If File.Exists("gezoziehng0.txt") Then
    14. For Each line In IO.File.ReadAllLines(pfad2)
    15. nr2 = nr2 + 1
    16. ' Dim parts() = line.Split(txt1 & "," & txt2 & "," & txt3 & "," & txt4 & "," & txt5 & "," & txt6 & "," & txt7)
    17. Dim parts() = line.Split(","c)
    18. Dim part1 = txt1
    19. Dim part2 = txt2
    20. Dim part3 = txt3
    21. Dim part4 = txt4
    22. Dim part5 = txt5
    23. Dim part6 = txt6
    24. Dim part7 = txt7
    25. Dim line2 = New List(Of Integer)
    26. For Each part In parts
    27. Dim gz1 = Integer.Parse(txt1)
    28. Dim gz2 = Integer.Parse(txt2)
    29. Dim gz3 = Integer.Parse(txt3)
    30. Dim gz4 = Integer.Parse(txt4)
    31. Dim gz5 = Integer.Parse(txt5)
    32. Dim gz6 = Integer.Parse(txt6)
    33. Dim gz7 = Integer.Parse(txt7)
    34. 'line2.Add(gz1 & "," & gz2 & "," & gz3 & "," & gz4 & "," & gz5 & "," & gz6 & "," & gz7)
    35. line2.Add(gz1)
    36. line2.Add(gz2)
    37. line2.Add(gz3)
    38. line2.Add(gz4)
    39. line2.Add(gz5)
    40. line2.Add(gz6)
    41. line2.Add(gz7)
    42. '--------------------------------------------.
    43. ' Anfang vom Vergleich der schon gezogenen Ziehungsreihen
    44. For z = 0 To gefzr.GetUpperBound(0)
    45. 'For y = 0 To line2.GetUpperBound(0)
    46. If gefzr(z) = gz1 Then
    47. gleich += 1
    48. End If
    49. Next
    50. Next
    51. ' Ende vom Vergleich der schon gezogenen Ziehungsreihen
    52. '--------------------------------------------
    53. txtanzvergl.Text = gleich
    54. txtanzr.Text = nr2
    55. lstA2.Items.Add(nr2 & ": " & line.ToArray())
    56. Next
    57. 'Next
    58. lstA.Items.Add("Datei - gezoziehng0.txt - nicht vorhanden")
    59. End If


    Ich hoffe du hast noch bissel gedult mit mir.
    Übrigends wünsche ich allen noch einen tollen Rutsch ins neue Jahr 2017 !
    Gruß Jiron

    Jiron schrieb:

    Nur ein Vergleich findet nicht statt
    Dann musst Du in Deinen Code hineinsteigen.
    Ich nehme mal an, Du weißt nicht, was Dein Code eigentlich macht. Das allgemeine Problem jedes C&P-Künstlers. ;)
    Setze einen Haltepunkt in Deinen Code, steppe ihn Zeile für Zeile durch und vergleiche den Inhalt der Variablen mit dem Inhalt, der da drin sein soll :!:
    Hast Du einen Unterschied gefunden, hast Du einen Fehler gefunden. 8o
    Lerne zu debuggen. Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, du hast recht. Wenn ich genau wüßte was da passiert, hätte ich auch den Fehler nicht reingeschrieben. Wie das halt so ist wenn man etwas nicht richtig kann.
    Werde mich ab morgen ransetzen und alles Zeile für Zeile durchgehen.
    Und danke für deine Gedult.
    Gruß Jiron
    Grüßt euch und wünsche allen ein gesundes neues Jahr
    Ich sitze jetzt ca. 3 Wochen an für euch sicher winzigen o.g. Problem. In meiner Literatur finde ich nicht mein Problem beschrieben und auch im Internet hab ich nicht das richtige gefunden. In meinem Umkreis hab ich keinen Programmierer. Mein Wissen über das Programmieren reicht offensichtlich auch nicht aus, eine Lösung von irgend Etwas abzuleiten. Die Fehlersuche mit dem Haltepunkt bringt mich auch nicht wirklich weiter.
    Fazit: Ich hänge fest.
    Ich weiss das Forum ist nicht dafür da um fertige Lösungen zu präsentieren. Ich möchte auch von keinem das er mir ein fertiges Programm schreibt. Ich möchte auch nicht mit meinem 60 Jahren hier betteln. Also meine einfache Frage: Kann mit irgend jemand bitte mal schreiben, wie ich das im Programm schreiben muß, damit ich die Zahlen jeder Zeile aus der Liste die ein String ist. mit den Zahlen aus dem Integer Array möglichst über GetUpperBound vergleichen kann ?
    Manchmal lernt man auch etwas, wenn mann wenigstens einmal sieht wie das gemacht wird.
    Gruß Jiron

    Jiron schrieb:

    möglichst über GetUpperBound
    Was genau meinst Du damit?
    ====
    Zunächst musst Du festlegen, welchen Datentyp Deine String-Werte haben, dann die String-Werte in numerische Werte konvertieren:

    VB.NET-Quellcode

    1. Dim ll As New List(Of Integer) ' oder List(Of Double)
    2. For Each strValue In MyStringList
    3. Dim value = Integer.Parse(strValue) ' oder = Double.Parse(strValue)
    4. ll.Add(value)
    5. Next
    Was genau willst Du vergleichen?
    "11", "12", "13" mit 22, 42, 43, 44?
    Die Anzahl der Elemente?
    Die Minima der numerischen Werte?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Was auch immer sinnvoll ist, wenn man eine richtige Methode codet, die so heißt, wie das Problem, was sie lösen soll.
    Guck, nu nach 14 Posts ist immer noch nicht klar, welches Problem gelöst werden soll.
    Und das letztlich, weil bereits in Post#1 nur "Code" gezeigt wird, aber keine Methode, damit keine Problem-Benennung, man weiß nicht, was gegeben ist, und was bei rauskommen soll.

    Für einen LottozahlenTester könnte ich mir eine Methode vorstellen, namens

    VB.NET-Quellcode

    1. Private Function AnzahlRichtige(ziehungsErgebnis As List(of byte), getippt As List(Of byte)) As Integer
    Wenn das das Problem richtig beschreibt (ich bin da nicht sicher), dann ist man doch schon einen SiebenMeilenStiefel-Schritt weiter, odr?
    Hallo und danke für eure Hilfe
    Habe mich nach euren letzten Tips nochmal hingesetzt und mit Split noch mal angefangen. Ich denke ich habe es nu geschafft. Jedenfalls lief der Versuchslauf gut und ohne Fehlermeldung. Ausschlaggebend dass ich es dann geschafft habe, war der Tip von "RodFromGermany" zur Konntrolle mit dem Haltepunkt zu arbeiten. Erst dadurch habe ich mitbekommen, das ich in meiner über 5500 Zeilen langen Liste ein paar Fehler hatte, mal ein Komma wo es nicht hingehörte oder eine fehlende Zahl. Nachdem ich die Liste in Ordnung hatte, vergingen ca. 10 min bis der Programmteil stand und rund 10 min die ich mir vor die Stirn klopfend im Zimmer rumlief.
    Also noch mal danke für die Hilfe und Gedult mit mir.
    Hier nun der Quellcode und hoffe es stimmt so:

    VB.NET-Quellcode

    1. Dim gleich, nr2, z, y As Integer
    2. gleich = 0
    3. nr2 = 0
    4. Dim gefzr() As Byte = {z1, z2, z3, z4, z5, z6}
    5. Dim pfad2 As String = ("gezoziehng0.txt")
    6. If File.Exists("gezoziehng0.txt") Then
    7. For Each line1 In IO.File.ReadAllLines(pfad2)
    8. nr2 = nr2 + 1
    9. Dim zahlenfolge = line1.Split(","c)
    10. Dim tz1 = Integer.Parse(zahlenfolge(0))
    11. Dim tz2 = Integer.Parse(zahlenfolge(1))
    12. Dim tz3 = Integer.Parse(zahlenfolge(2))
    13. Dim tz4 = Integer.Parse(zahlenfolge(3))
    14. Dim tz5 = Integer.Parse(zahlenfolge(4))
    15. Dim tz6 = Integer.Parse(zahlenfolge(5))
    16. Dim tz7 = Integer.Parse(zahlenfolge(6))
    17. Dim line2() As Integer = {tz1, tz2, tz3, tz4, tz5, tz6, tz7}
    18. '--------------------------------------------.
    19. ' Anfang vom Vergleich der schon gezogenen Ziehungsreihen
    20. For z = 0 To gefzr.GetUpperBound(0)
    21. For y = 0 To line2.GetUpperBound(0)
    22. If gefzr(z) = line2(y) Then
    23. gleich += 1
    24. End If
    25. Next
    26. Next
    27. ' Ende vom Vergleich der schon gezogenen Ziehungsreihen
    28. '--------------------------------------------
    29. txtanzvergl.Text = gleich
    30. txtanzr.Text = nr2
    31. lstA2.Items.Add(nr2 & ": " & line1.ToArray())
    32. Next
    33. lstA.Items.Add("Datei - gezoziehng0.txt - nicht vorhanden")
    34. End If



    Das mit dem Vergleich wird natürlich noch anderst - ist im Moment nur zu Versuchszwecken so.
    Die Ausgabe in die Listbox kommt weg, war jetzt nur zur Konntrolle für mich.

    Noch mal danke für die Hilfe !
    Gruß Jiron