Hallo VB Freunde,
Ich muss 180 Werte aus einer Liste180 mit einer anderen Liste586, die 586 Werte hat, VERGLEICHEN. Da die Werte dynamisch sind können auch andere Werte vorkommen und sind daher nicht immer gleich.
Sobald die Werte übereinstimmen, schreibe ich mir Ein "TRUE" in meine List(of Boolean hinein). Ein False in der Liste wird erst reingeschrieben, wenn die Liste einmal komplett durch ist.
Wenn eine Überstimmung erfolgreich war, springt er in der Liste586 zu einem anderen Startwert. Dies mache ich deshalb, damit er nicht unnötig weiter vergleicht.
Da ich die Startwerte immer vorher berechne, vermeide ich somit überflüssigen Vergleich.
Hier Mein Code:
Mein Problem ist der Sprung funktioniert nicht entweder ich bekommen eine Fehlermeldung, das der Index außerhalb des Bereichs liegt, betrifft die StartWerte Liste.
Oder ich habe eine endlossschleife und er vergleicht lediglich nur den ersten Wert andauernd ohne zu realisieren, dass er dann den nächsten Wert nehmen soll
Ich habe es versucht so ausführlich wie möglich zu kommentieren, damit ihr meinen Code versteht bzw. die Idee die dahinter steckt.
Selbstverständlich bin ich auch offen für eure Ideen, wie man es vllt am geschickesten lösen könnte. wie schon gesagt sind die Einträge der Liste dynamisch die Werte
können eine sehr hohe Anzahl annehmen. Dennoch muss ich diesen Vergleich praktizieren, damit ich weiter an meinem Projekt arbeiten kann.
Was ich immer weiß bzw was ich mir immer vorher ausrechne ist die maximale Länge der Listen und die neuen Startwerte in diesem Beispiel ist es nun 586 und 180. Startwerte siehe oben im QuellCode.
Vielen Dank für eure Tipps und Hilfe!!!
Ich muss 180 Werte aus einer Liste180 mit einer anderen Liste586, die 586 Werte hat, VERGLEICHEN. Da die Werte dynamisch sind können auch andere Werte vorkommen und sind daher nicht immer gleich.
Sobald die Werte übereinstimmen, schreibe ich mir Ein "TRUE" in meine List(of Boolean hinein). Ein False in der Liste wird erst reingeschrieben, wenn die Liste einmal komplett durch ist.
Wenn eine Überstimmung erfolgreich war, springt er in der Liste586 zu einem anderen Startwert. Dies mache ich deshalb, damit er nicht unnötig weiter vergleicht.
Da ich die Startwerte immer vorher berechne, vermeide ich somit überflüssigen Vergleich.
Hier Mein Code:
VB.NET-Quellcode
- Dim Liste180Werte As New List(of String)' Hier sind in diesem Bsp. 180 Strings
- Dim Liste586Werte As New List(of String)'Hier sind in diesem Bsp. 586 Strings
- Dim BedingungsCheckListe As New List(of Boolean)'Liste um bei gefundenen Eintrag True oder False wenn nicht gefunden zu setzen
- Dim StartWerte As New List(of Integer)'Die Liste enthält in diesem Bsp. 5 StartWerte: 0, 112, 242, 359, 480
- Dim zaehler As Integer = 0
- Dim laeufer As Integer = 0
- Dim k As Integer = 0
- Dim l As Integer = 0
- Dim WertVergleich As Integer = 0
- Dim NrInListe As Integer = 0
- Dim iFinde As Integer = 0
- Dim letzteZeile As Integer = 5' hat in diesem Bsp. 5 muss aber nicht, ändert sich
- Dim Code180Str As String = ""
- Dim Code586Str As String = ""
- For iFinde = 0 To Liste180Werte.Count - 1'Gehe die Liste180Werte durch
- Code180Str = Liste180Werte(iFinde)'Überschreibe bei jedem Durchlauf diesen String, dient zum späteren Vergleich
- Do
- For NrInListe = 0 To Liste580Werte.Count - 1'Gehe die Liste580Werte durch
- Code586Str = Liste586Werte(NrInListe)'Überschreibe bei jedem Durchlauf diesen String ebenso, dient zum späteren Vergleich
- 'Debug.WriteLine(" Code180Str = Code586Str!" & Code180Str.Substring(0, 3) & Komma & Code586Str.Substring(5, 3))'AUsgabe zum Test
- If Code180Str.Substring(0, 3) = Code586Str.Substring(5, 3) Then'Vergleiche beide String, ob gleich ist?
- BedingungsCheckListe.Insert(zaehler, True)'er hat was gleiches gefunden; Schreibe ein TRUE in BedingungsCheckListe
- zaehler += 1' Erhöhe den zaehler dieser Liste
- 'Diese If Abfrage dient dazu, damit die Liste ihr ende erreict und dann nicht mehr erhöht wird
- If laeufer <= letzteZeile-1 Then' Die Variable laeufer, ist die Variable für die Liste und die Variable letzteZeile hat in diesem Bsp. den Wert 5
- 'Hier taucht auch der Fehler auf: Der Index liegt außerhalb des Bereichs...
- WertVergleich = StartWerte(laeufer)' Die werte werden somit, sobald True gesetzt geschrieben wurde, der neue Startwert der Varaiablen übergeben
- NrInListe = WertVergleich' Diese Variable wird Jetzt der Variablen NrInListe zugewiesen, um oben der For Schleife den neuen Zaehlwert zu übergeben
- laeufer += 1'Erhöhe den Listenzaehler um 1
- End If
- k += 1' Diese Variable dient dazu, dass ich immer mit zaehle wie viel mal er hier True gesetzt hat damit ich dann weiß wie viel mal ich false setzen muss
- 'Debug.WriteLine("True")
- ElseIf k = 0 Then ' Wenn der erste durchlauf mit WERT "XYZ" kein Erfolg hatte, wurde somit auch k nicht hochgezaehlt, dann mache ich hier weiter
- For l = zaehler To letzteZeile'der Wert der Variable Zaehler wird hier l zugewiesen, damit die Reihenfolge in der BedingungsChekListe bestehen bleibt.
- BedingungsCheckListe.Insert(zaehler, False)'es wird jetzt 5 mal False hineingeschrieben
- zaehler += 1' Erhöhe den zaehler dieser Liste
- 'Debug.WriteLine("False")
- Next
- ElseIf k <> 0 Then'Falls der k Wert ungleich ist dann..
- For l = zaehler To letzteZeile - k'
- BedingungsCheckListe.Insert(zaehler, False)' Schreibt er mir nur soviele False hinein wie viel aus der Rechnung: letzteZeile - k resultieren
- zaehler += 1'Erhöhe den zaehler dieser Liste
- 'Debug.WriteLine("False")
- Next
- End If
- Next NrInListe' Hier wird die Variable NrInListe immer erhöht
- Loop Until NrInListe <> StrTotal'Diesen Block macht er solange bis er die Totallänge erreicht die in diesem Fall 586 ist
- NrInListe = 0'dann wird die Variable NrInListe wieder auf 0 gesetzt
- laeufer = 0' diese Variable für die Startwert wird ebenfalls auf 0 gesetzt
- Next iFinde' Jetzt wird der nächste Wert aus der Liste180Werte genommen und wieder komplett verglichen mit der anderen Liste, dabei
- 'soll wieder gesprungen werden
Mein Problem ist der Sprung funktioniert nicht entweder ich bekommen eine Fehlermeldung, das der Index außerhalb des Bereichs liegt, betrifft die StartWerte Liste.
Oder ich habe eine endlossschleife und er vergleicht lediglich nur den ersten Wert andauernd ohne zu realisieren, dass er dann den nächsten Wert nehmen soll
Ich habe es versucht so ausführlich wie möglich zu kommentieren, damit ihr meinen Code versteht bzw. die Idee die dahinter steckt.
Selbstverständlich bin ich auch offen für eure Ideen, wie man es vllt am geschickesten lösen könnte. wie schon gesagt sind die Einträge der Liste dynamisch die Werte
können eine sehr hohe Anzahl annehmen. Dennoch muss ich diesen Vergleich praktizieren, damit ich weiter an meinem Projekt arbeiten kann.
Was ich immer weiß bzw was ich mir immer vorher ausrechne ist die maximale Länge der Listen und die neuen Startwerte in diesem Beispiel ist es nun 586 und 180. Startwerte siehe oben im QuellCode.
Vielen Dank für eure Tipps und Hilfe!!!

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Akki“ ()