String Trennen & In ListView

  • VB.NET

Es gibt 38 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    String Trennen & In ListView

    Hey Leute,

    Mein Code zuallererst:

    VB.NET-Quellcode

    1. Dim Shit As String = "Some String"
    2. Dim MyInteger As Integer = 1337
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. TextBox1.Text = "Mein erster Text" + "###" + Shit + "###" "12345312" + "###" + MyInteger
    5. End Sub


    So, das als Beispiel.
    Nun könnt ihr sehen das ich ich jeweils zwischen meinen Werten das Keyword ### verwende.
    Ich möchte nun dieses Gewurschtel, in ein ListView laden.
    Das heißt das ### soll als erkennungszeichen dienen um in das nächste SubItem zu gehen.
    Später soll das dann so aussehen:

    ListViewItem 1 = "Mein erster text"
    ListViewSubitem1 = shit
    ListViewSubitem2 = 12345312
    ListViewSubitem3 = myInteger.

    Die ###'s sollen entfernt werden.
    Wie kann ich das am besten machen?
    C# Developer
    Learning C++
    Nimm nicht denselben Platzhalter für Deine ersetzungen, sondern individualisiere sie.
    ##_ZAHL1_##, ##_WERT1_## usw.
    Und dann:

    VB.NET-Quellcode

    1. txt = txt.Replace("##_ZAHL1_##", "123")
    2. txt = txt.Replace("##_WERT1_##", "Auto")
    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!

    Rikudo schrieb:

    Aber als was müsste die Variable die du verwendest (txt) deklariert werden?
    z.B. so:

    VB.NET-Quellcode

    1. Dim txt As String = "Mein erster Text" + "#1#" + Shit + "#2#" "12345312" + "#3#" + MyInteger
    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
    Ich glaube du hast ihn falsch versanden. Er will die "###" ja nicht ersetzen sondern einfach entfernen.

    @Rikudo
    Ich würde das so realisieren:

    VB.NET-Quellcode

    1. Dim parts() = TextBox1.Text.Split({"###"}, StringSplitOptions.None)
    2. Dim item = ListView1.Items.Add(parts(0))
    3. For i = 1 To parts.Length - 1
    4. item.SubItems.Add(parts(i))
    5. Next
    Gut, dann frag ich mal ^^
    Könntest du mir erklären was in jeder einzelnen Zeile passiert?
    Das adden ins ListView ist klar, aber ich verstehe das nicht ganz:

    VB.NET-Quellcode

    1. Dim parts() = SampleInfo.Split({"###"}, StringSplitOptions.None)
    2. Dim item = ListView1.Items.Add(parts(0))
    C# Developer
    Learning C++
    Nun, in der ersten Zeile wird der Text getrennt. Die "###" geben an, an welcher Stelle die Trennung erfolgen soll. Die geschweiften Klammern sind dafür da, um das als Array zu deklarieren, denn es ist auch möglich mehrere Trennstellen anzugeben. StringSplitOptions.None gibt einfach an, dass keine spezielle Operation mit den Teilen durchgeführt werden soll. Am Ende landen die einzelnen Teile dann als Array in der Variable parts, ohne die "###", die werden ausgelassen.
    In der zweiten Zeile wird dem Listview ein neues Item hinzugefügt und das erste Element aus dem Array als Text verwendet. Das Listvieitem landet dann in der Variable item. Diese Variable wird dann in der Schleife verwendet, um die Subitems hinzuzufügen.
    Das läuft ja schon alles ganz gut.
    Ich lese diesen String aber aus einer txt aus.
    Und diese hat diese Informationen nicht nur in einer Zeile, sondern in mehreren, Beispiel:

    Quellcode

    1. Name1###name2###name3
    2. SubItem1###SubItem2###SubItem3
    3. Nochwas###nochwas2###nochwas3


    Kann ich dann machen das diese Items nachwievor sortiert werden, aber für jede neue zeile in der txt-datei auch neu im ListView eine neue Zeile angelegt wird?
    Am besten mit dem Code von Artentus:

    Artentus schrieb:


    Dim parts() = TextBox1.Text.Split({"###"}, StringSplitOptions.None)
    Dim item = ListView1.Items.Add(parts(0))
    For i = 1 To parts.Length - 1
    item.SubItems.Add(parts(i))
    Next
    C# Developer
    Learning C++
    Du brauchst einfach nur noch ne Schleife drum rumlegen:

    VB.NET-Quellcode

    1. Dim lines() = File.ReadAllLines(<Pfad zur Datei>)
    2. For Each line In lines
    3. Dim parts() = line.Split({"###"}, StringiSplitOptions.None)
    4. Dim item = ListView1.Items.Add(parts(0))
    5. For i = 1 To parts.Length - 1
    6. item.SubItems.Add(parts(i))
    7. Next
    8. Next

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

    so das ist ja komisch. Mein String in der txt Datei sieht folgendermaßen aus:

    VB.NET-Quellcode

    1. VB###Paradise###Is###a cool###website###
    2. This###is another###Test###of###my program


    Also zwei Zeilen. Soweit verständlich?
    Ich ziehe mir diese Datei von meinem FTP Server und formatiere ihn entsprechend:

    VB.NET-Quellcode

    1. Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    2. ListViewMain.Items.Clear() 'Leert ListView vor Refresh
    3. Try
    4. For Each line In lines 'Schleife für jede Zeile in der txt Datei
    5. Dim test As String = (New WebClient().DownloadString("http://Blubb.com/File.txt"))
    6. Dim parts() = test.Split({"###"}, StringSplitOptions.None) 'Split bei ###'s
    7. Dim item = ListViewMain.Items.Add(parts(0)) 'Fügt ListViewItems Die formatierten Daten zu
    8. For i = 1 To parts.Length - 1 'Erkennt anzahl der Lines und fügt entsprechend viele Subitems hinzu
    9. item.SubItems.Add(parts(i)) 'Füllt Subitems
    10. Next
    11. Next
    12. Catch ex As IOException
    13. MsgBox("Datei nicht gefunden!") 'Bei Fehler MsgBox
    14. End Try
    15. End Sub


    Eigentlich sollte das Ergebnis so aussehen das eine Zeile die entsprechenden Informationen der ersten Zeile im txt File bekommt und die zweite zeile die entsprechende zweite zeile.
    Allderings, kommt das ganze viermal und dann auch noch das falsche.



    Woran liegt das?
    C# Developer
    Learning C++
    Hm, okay das klingt einleuchtend.
    Ich habe es jetzt auserhalb der Schleife gemacht, allerdings tauchen jetzt mehrere hundert Einträge auf (Auch nur aus der Ersten Zeile der txt)
    Mein Code:

    VB.NET-Quellcode

    1. Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    2. ListViewMain.Items.Clear() 'Leert ListView vor Refresh
    3. Dim Test As String = New WebClient().DownloadString("http://blublublib/bored.txt")
    4. Dim parts() = Test.Split({"###"}, StringSplitOptions.None) 'Split bei ###'s
    5. Try
    6. For Each line In Test 'Schleife für jede Zeile in der txt Datei
    7. Dim item = ListViewMain.Items.Add(parts(0)) 'Fügt ListViewItems Die formatierten Daten zu
    8. For i = 1 To parts.Length - 1 'Erkennt anzahl der Lines und fügt entsprechend viele Subitems hinzu
    9. item.SubItems.Add(parts(i)) 'Füllt Subitems
    10. Next
    11. Next
    12. Catch ex As IOException
    13. MsgBox("Datei nicht gefunden!") 'Bei Fehler MsgBox
    14. End Try
    15. End Sub
    C# Developer
    Learning C++
    Hier hab ich mein Beispiel mal umgeschrieben:

    VB.NET-Quellcode

    1. Dim wb As New WebClient
    2. Dim lines() = wb.DownloadString("http://Blubb.com/File.txt").Split({vbCrLf}, StringSplitOptions.None)
    3. For Each line In lines
    4. Dim parts() = line.Split({"###"}, StringSplitOptions.None)
    5. Dim item = ListView1.Items.Add(parts(0))
    6. For i = 1 To parts.Length - 1
    7. item.SubItems.Add(parts(i))
    8. Next
    9. Next
    Hm, jetzt hab ichs nimmer im for-each, allerdings taucht nun nur das erste auf (also die erste zeile der txt, die zweite nicht ;/

    VB.NET-Quellcode

    1. Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    2. ListViewMain.Items.Clear() 'Leert ListView vor Refresh
    3. Dim Test As String = New WebClient().DownloadString("http://sdsdfsd.com/File.txt")
    4. Dim parts() = Test.Split({"###"}, StringSplitOptions.None) 'Split bei ###'s
    5. Try
    6. Dim item = ListViewMain.Items.Add(parts(0)) 'Fügt ListViewItems Die formatierten Daten zu
    7. For Each line In Test 'Schleife für jede Zeile in der txt Datei
    8. For i = 1 To parts.Length - 1 'Erkennt anzahl der Lines und fügt entsprechend viele Subitems hinzu
    9. item.SubItems.Add(parts(i)) 'Füllt Subitems
    10. Next
    11. Next
    12. Catch ex As IOException
    13. MsgBox("Datei nicht gefunden!") 'Bei Fehler MsgBox
    14. End Try
    15. End Sub
    C# Developer
    Learning C++