Zeilen aus einer txt gesplittet in listview einfügen

  • VB.NET

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

    Zeilen aus einer txt gesplittet in listview einfügen

    Hallo Freunde,

    Mein Vorhaben:

    Ich habe eine txt, die so aussieht:

    02.07.12-17:44-Text01
    03.07.12-00:15-Text02
    04.07.12-14:38-Text03

    Ich habe in meinem Programm eine Listview mit 3 spalten, für die einträge in der TXT. Bei der txt dient das "-" als splitchar.

    beim laden der txt sollen alle zeilen in die listview eingetragen werden.

    Ich habe anscheind n fehler gemacht, denn egal, wie viele zeilen ich in der txt stehen hab, in jeder zeile steht immer nur das, was auch in der ersten zeile steht:

    VB.NET-Quellcode

    1. OpenFileDialog1.InitialDirectory = Application.StartupPath
    2. OpenFileDialog1.ShowDialog()
    3. If OpenFileDialog1.FileName = "" Then GoTo idle
    4. Try
    5. Dim sw As IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(OpenFileDialog1.FileName)
    6. Dim Zeile As String = sw.ReadLine
    7. Dim Split() As String = Zeile.Split("-")
    8. sw.Close()
    9. ListView1.Items.Clear()
    10. For Each line As String In System.IO.File.ReadLines(OpenFileDialog1.FileName)
    11. Dim NeueZeile As New ListViewItem(New String() {Split(0), Split(1), Split(2), Split(3)})
    12. ListView1.Items.Add(NeueZeile)
    13. Next
    14. ToolStripStatusLabel1.Text = "Geöffnete Liste: " & OpenFileDialog1.SafeFileName
    15. Catch ex As Exception
    16. MsgBox("Fehler beim Laden der Listen-Datei.", MsgBoxStyle.Critical, "Datei laden")
    17. End Try
    18. idle:


    Verständlicher weise möchte ich nicht den text des ersten Eintrages für alle anderen Einträge haben.

    kann mir jemand helfen?

    Danke im Vorraus :)

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

    Du ließt nur die erste Zeile aus.

    Du brauchst ReadAllLines, oder gehst solange mit ReadLine das Dokument durch, bis du am FileEnd bist.
    Dann kannst munter rumsplitten, sollte dann auch funktionieren (so auf den ersten Blick)
    Hi und danke erstmal.

    Wenn ich

    VB.NET-Quellcode

    1. For Each line As String In System.IO.File.ReadLines(OpenFileDialog1.FileName)

    durch

    VB.NET-Quellcode

    1. For Each line As String In System.IO.File.ReadAllLines(OpenFileDialog1.FileName)

    ersetze, tut sich nix...die funktion ist genau so, wie mit ReadLines.

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

    Grade gesehen... warum liest du zweimal? Erst die erste Zeile, dann nochmal alle zeilen?

    Der Fehler liegt aber darin, das du im oberen Konstrukt Split festlegst, im unteren, wo du die einzelnen Zeilen liest, immer das selbe Split nimmst.
    Du musst es überschreiben mit der aktuellen line.Split

    PS: In dem Catch solltst du unbedingt die Fehlermeldung ausgeben lassen... zumindest irgendwas mit der machen, damit man weiß, warum es nicht geht. Wenn bspw. ein falsches Format vorliegt.
    Probier es mal so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Using OpenFileDialog1 As New OpenFileDialog
    3. OpenFileDialog1.InitialDirectory = Application.StartupPath
    4. If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    5. Dim lines() As String = System.IO.File.ReadAllLines(OpenFileDialog1.FileName)
    6. ListView1.Items.Clear()
    7. For Each line As String In lines
    8. Dim Split() As String = line.Split("-")
    9. Dim NeueZeile As New ListViewItem(New String() {Split(0), Split(1), Split(2)})
    10. ListView1.Items.Add(NeueZeile)
    11. Next
    12. 'ToolStripStatusLabel1.Text = "Geöffnete Liste: " & OpenFileDialog1.SafeFileName
    13. End If
    14. End Using
    15. 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!
    Okay, habe jetzt hinzugefügt, dass man selber einträge über das programm hinzufügen kann.
    Möchte jetzt gern eine speicherfuntion hinzufügen, die dann den text aus der listview in eine txt überträgt, die dann auch das selbe format hat, wie oben beschrieben.

    bis jetzt habe ich das:

    VB.NET-Quellcode

    1. SaveFileDialog1.ShowDialog()
    2. For Each l As ListViewItem In ListView1.Items
    3. Dim lines() As String = File.WriteAllLines(SaveFileDialog1.FileName, ???)
    4. Next
    Kann man das überhaupt so schreiben? die "???" sollen für die listview einträge stehen, jedoch weiß ich nicht, wie diese hier reingeschrieben werden.
    Ist das mit der For each schleife korrekt?

    Gruß

    VB.NET-Quellcode

    1. File.WriteAllLines(SaveFileDialog1.FileName, lines)
    Du solltest auf die Entwicklungsumgebung hören:
    Bilder
    • WriteAll.jpg

      10,08 kB, 379×68, 105 mal angesehen
    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!
    Wie meintest du das mit dem Befehl "lines" ?

    Wenn ich es so eingebe, funktioniert es ja nicht.
    Die txt, die gespeichert werden soll, soll wie gesagt die Einträge aus der Listview nehmen. Meine Listview hat eine variable Zeilenanzahl, darum hab ich das auch erstmal in eine "For Each-Schleife" geschrieben. Weiterhin hat die Listview 4 Spalten mit Texten. Die Datei, die gespeichert werden soll, soll genau das selbe format haben, wie die Listview, nur, dass zwischen den Einträgen wieder der Splitkey "-" eingefügt werden muss, damit sie anschließend auch wieder gelesen werden kann.

    Mit der Entwicklungsumgebung kann ich dabei nix anfangen, da ich zwar weiß, dass bei den Fragezeichen der Context hineingehört, ich aber nicht weiß, wie man da die Einträge der Listview korrekt angibt ;)
    lines soll das sein, was Du speichern willst.
    Du musst Deine Listview-Zeilen in eine List(Of String) adden und diese dann mit .ToArray in den WriteAllLines()-Befehl schreiben.
    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, werd gleich mal in die tasten hauen :)
    Melde mich gleich wieder 8-)

    EDIT: Lässt sich etwas schwierig gestalten, da ich nicht so der Listview-crack bin ^^

    VB.NET-Quellcode

    1. SaveFileDialog1.ShowDialog()
    2. Dim List As New List(Of ListView)
    3. File.WriteAllLines(SaveFileDialog1.FileName, List)
    4. End Sub


    wie weise ich das jetzt meiner listview1 zu ?

    und des weiteren soll er ja nicht nur den text in die txt speichern, sondern zwischen den spaltentexten ein "-" einfügen.
    ich bin überfordert :thumbsup:

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

    Please!

    Fang mal mit vernünftige Datenverarbeitung an!

    Deine Datensätze beinhalten einen DateTime und einen Text.
    Bisher hast du mit Laden/Speichern rumgewurstelt, neuerlich willst du auch adden, demnächst wirst du auch löschen und Ändern wollen - kurz: du näherst dich allmählich einer selbstgebastelten Implementation von CRUD an.
    Für CRUD gibts aber bereits annähernd perfekt umgesetzte Programmier-Elemente und eine Unterstützung, deren Mächtigkeit du dir vmtl. nicht vorstellen kannst (weil du kennst kein Databinding).

    Also ich würde vorschlagen, du verläßt mal langsam den ListView-Holzweg, und fängst mit was vernünftigem an, zB mit Daten laden, speichern, verarbeiten