String Trennen & In ListView

  • VB.NET

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

    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. Dim wb As New Net.WebClient
    5. Dim lines() = wb.DownloadString("http://xxx/xxx.txt").Split({vbCrLf}, StringSplitOptions.None)
    6. For Each line In lines
    7. Dim parts() = line.Split({"###"}, StringSplitOptions.None)
    8. Dim item = ListViewMain.Items.Add(parts(0))
    9. For i = 1 To parts.Length - 1
    10. item.SubItems.Add(parts(i))
    11. Next
    12. Next
    13. Catch ex As IOException
    14. MsgBox("Fehler aufgetreten: " & ex.Message) 'Bei Fehler MsgBox
    15. End Try
    16. End Sub


    Ja, habs jetzt mal mit Artentus neuem Code probiert.
    Aus irgend nem grund zeigts mir trotzdem nur die erste zeile an :/

    Und ich hab mal ex.message hinzugefügt, das zeigt mir den Fehler ja auch
    C# Developer
    Learning C++
    Hm, ich glaube ich weiß ungefähr was das Problem ist, aber nicht wie ich es lösen soll.
    Und zwar, wenn die Datei so aussieht sehe ich nur die erste Zeile:

    VB.NET-Quellcode

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


    So allerdings lässt sich im letzten Subitem noch der "This-" schnipsel der zweiten zeile erkennen:

    VB.NET-Quellcode

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


    Das heißt er hängt den rest iwie in weitere Subitems dran, anstatt eine neue Zeile zu eröffnen.
    Ich habe 5 Cloumns, das heißt nach 5 sortierten items, muss die nächste Zeile hinzugefügt werden. Aber wie?
    C# Developer
    Learning C++
    Kein Problem:

    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 Math.Min(parts.Length - 1, 4)
    7. item.SubItems.Add(parts(i))
    8. Next
    9. Next

    So werden maximal 5 Einträge pro Zeile gemacht. Die restlichen werden einfach ignoriert.

    Artentus schrieb:

    Kein Problem:

    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 Math.Min(parts.Length - 1, 4)
    7. item.SubItems.Add(parts(i))
    8. Next
    9. Next

    So werden maximal 5 Einträge pro Zeile gemacht. Die restlichen werden einfach ignoriert.


    Jetzt ignoriert er sie, allerdings wird die zweite Zeile nicht geaddet. Der "This-" Schnipsel wird ignoriert und der rest danach ja dann auch oder ? :s
    Das programm müsste im Idealfall die anzahl der Zeilen auslesen und dann entsprechend viele Items hinzufügen und diese für jede Zeile formatieren, oder?
    C# Developer
    Learning C++
    Ich hatte eigentlich was anderes gemeint, aber das reicht mir trotzdem :).
    Das Problem ist, dass nicht korrekt gesplittet wird. Du hast die Datei nicht unter einem Windows-System erstellt oder? Denn wie in dem String zu erkennen ist wird als Zeilenumbruch nicht CrLf sondern nur Lf verwendet, was auf Unix/Linux schließen lässt. Du kannst entweder die Datei in Ordnung bringen oder im Code vbCrLf durch vbLf ersetzen.

    Artentus schrieb:

    ... Denn wie in dem String zu erkennen ist wird als Zeilenumbruch nicht CrLf sondern nur Lf verwendet, was auf Unix/Linux schließen lässt...
    Wegen dieser Unsicherheit sollteman Texte, die man Zeilenweise auswerten will, nicht in einen einzigen String laden, sondern einen Stream darauf öffnen, und darauf einen StreamReader setzen.
    Denn StreamReader.ReadLine() liest genau eine Zeile, und zwar richtig, und unabhängig von der ZeilVorschub-Konvention des Systems, wo die Datei herkommt.

    In diesem Falle käme also WebClient.OpenRead() in Frage, um den Stream zu erhalten.
    Ich bin grade bin bisschen am rumexperimentieren and versuche den String in dem selben format mit den ###'s aus ner lokalen txt Datei auszulesen.

    Dabei bekomme ich den Fehler: Ungültige Konvertierung von File.txt in Integer?:0

    VB.NET-Quellcode

    1. Try
    2. Dim lines() As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData & "\File.txt").Split({vbLf}, StringSplitOptions.None)
    3. For Each line In lines
    4. Dim parts() = line.Split({"###"}, StringSplitOptions.None)
    5. Dim item = ListViewMain.Items.Add(parts(0))
    6. For i = 1 To Math.Min(parts.Length - 1, 4)
    7. item.SubItems.Add(parts(i))
    8. Next
    9. Next
    10. Catch ex As WebException ListBoxReport.Items.Add(Format(Now, "[HH:mm]") & " Error occured: ex.message")
    11. End Try
    C# Developer
    Learning C++