vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Einträge einer Listbox splitten und in eine Liste (List(of String) einfügen 
Autor: timo_81
Datum: 09.07.11 17:03

Hi Leute,

nach jahrelanger Programmierabstinenz, hat mich das Programmierfieber wieder gepackt.
Die bisherigen Hürden wurden auch alle gemeistert - doch an folgendem Problem beiß ich auf Granit:


Ich habe ein Listboxelement in dem sich eine Schachnotation befindet. Nun möchte ich die Notation die
das Format 1. e4 e6 2. d4 d5 ... an den Leerstellen so splitten, dass ich die weißen Züge in eine Liste und die schwarzen Züge in eine weiter packen kann (Sie sollen später getrennt angesprochen werden können)

Mein Ansatz sieht wie folgt aus:


    Public zug_weiß As New List(Of String)
    Public zug_schwarz As New List(Of String)
    Dim w_string,s_string As String
 
For i = 1 To ListBox1.Items.Count - 1
                w_string = ListBox1.Items(i).ToString
                s_string = ListBox1.Items(i).ToString
 
                w_string = Split(w_string, " ")(1)
                s_string = Split(s_string, " ")(2)
                zug_weiß.Add(Trim(w_string))
                zug_schwarz.Add(Trim(s_string))
            Next
Die Listen sollen später im gesamten Projekt verfügbar und über Indizes ansprechbar sein.

Vielen Dank für Hilfestellungen!
Grüße
timo_81
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einträge einer Listbox splitten und in eine Liste (List(of String) einfügen 
Autor: Manfred X
Datum: 09.07.11 23:12

Hallo!

In VB.Net ist die Indizierung von Listen und Arrays null-basiert.
Von projekt-globalen Variablen ist eher abzuraten.
Wie kommen die Daten in die Listbox?
 
For i As Integer = 0 To listbox1.Items.Count - 1
    w_string = listbox1.Items(i).ToString
    s_string = listbox1.Items(i).ToString
 
    w_string = Split(w_string, " ")(0)
    s_string = Split(s_string, " ")(1)
 
    zug_weiß.Add(Trim(w_string))
    zug_schwarz.Add(Trim(s_string))
Next i
 
'Oder so:
 
For i As Integer = 0 To listbox1.Items.Count - 1
    Dim w_string() As String = Split(listbox1.Items(i).ToString, " ")
 
    zug_weiß.Add(Trim(w_string(0)))
    zug_schwarz.Add(Trim(w_string(1)))
Next i
MfG
Manfred

Beitrag wurde zuletzt am 09.07.11 um 23:16:55 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einträge einer Listbox splitten und in eine Liste (List(of String) einfügen 
Autor: timo_81
Datum: 10.07.11 01:16

Hallo Manfred,

vielen Dank für Deine Hilfe. Das Programm läuft nun ohne zu murren, allerdings ist mir noch ein Fehler aufgefallen:

Anstatt alle Werte aus der Listbox auszulesen hält er bei Zug sieben an und wiederholt dann die Züge nochmals ohne weiter zu gehen.Könnte dies an einem Zeilenumbruch liegen der im Originaltext enthalten, in der Listbox aber nicht mehr zu erkenn war?

Der geparste Text sah aus wie folgt:

1. e4 e6 2. b3 b6 3. Bb2 Bb7 4. Nc3 Nf6 5. Qe2 Be7 6. O-O-O O-O 7. f4 d5 8. e5
Nfd7 9. Nf3 Qe8 10. Re1 Ba6 11. Qf2 Bxf1 12. Qxf1 Nc6 13. Qb5 Na5 14. g4 f6 15.
Nxd5 exd5 16. Qxd5+ Kh8 17. e6 Nc5 18. Nd4 Rd8 19. Qf3 Ncb7 20. h4 c5 21. Nf5
Nd6 22. Ng3 f5 23. g5 Nc6 24. h5 Kg8 25. Rh2 Nd4 26. Qf2 Qc6 27. Bxd4 cxd4 28.
Qxd4 Ne4 29. Qe3 Bc5 30. Nxf5 Rxf5 31. Qxe4 Qxe4 32. Rxe4 Re8 33. d4 Bd6 34.
Rf2 Be7 35. c4 Bxg5 36. b4 Be7 37. c5 bxc5 38. bxc5 Rxh5

Wie man sie sind bei Zug 8 / 15 / 21 /28 /34 "Bruchstücke am Zeilenende"
Könnte da der Fehler liegen?


Vielen Dank für Deine bisherigen Bemühungen
Gruß
timo_81
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einträge einer Listbox splitten und in eine Liste (List(of String) einfügen 
Autor: Manfred X
Datum: 10.07.11 05:03

Hallo!

Ich kenne Deine Datenquelle nicht.
Steuerzeichen können enthalten sein, z.b.
Carriage Return / Line Feed für den Zeilenumbruch.

Abhängig davon, wie Du diesen String (Text) aufspaltest
und die Listbox-Items füllst, können solche Steuerzeichen
übertragen werden.

Als nachträglich einsetzbare Behelfslösung kannst Du die Items
"säubern", d.h. Steuerzeichen entfernen - z.B. durch
Verwendung der "IsControl"-Methode (Unicode!) der Char-Struktur.
For i As Integer = 0 To listbox1.Items.Count - 1
   Dim content As New System.Text.StringBuilder(listbox1.Items(i).ToString)
 
   For c As Integer = content.Length - 1 To 0 Step -1
       If Char.IsControl(content(c)) Then content.Remove(c, 1)
   Next c
 
   listbox1.Items(i) = content.ToString
Next i
Einfach mal probieren.

Günstiger wäre es, die Einträge (Züge) bereits beim Lesen/Zugreifen
kontrolliert in die Spalten einer Datatable-Instanz einzutragen und
die Steuerelemente daran zu binden.

Zu den Gründen der Zug-Wiederholung kann ich - mangels Info - nichts sagen.

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel