Richtiges lesen einer Txt mir einer Listbox

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Richtiges lesen einer Txt mir einer Listbox

    Hallo,
    mit folgendem Befehl lese ich die txt mit meiner Listbox.


    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. ListBox3.Items.Add(My.Computer.FileSystem.ReadAllText("Pfad.txt"))
    3. End Sub


    Die txt ist ordentlich formatiert, also jedes Wort ist in einer zeile geschrieben. Dies wird von der Listbox jedoch nicht so gelesen, sondern
    es werden alle Wörter in einer Zeile geschrieben.

    Wie kann die Listbox so lesen, dass auch alle Wörter jeweils in einer Zeile sind, genauso wie es eben in der txt drinne ist?

    LG

    VB.NET-Quellcode

    1. ListBox.Items.AddRange(IO.File.ReadAllLines("[Dateipfad]"))


    Und ansonsten kann ich meinem Vorredner nur zustimmen :D

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

    ReadAllText liefert einen String zurück. Einen.
    Also nimm, wie vorgeschlagen, IO.File.ReadAllLines(path), das gibt dir ein String-Array zurück.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Also wenn du jedes ListBox Item wieder in eine seperate Zeile haben willst kannst du WriteAllLines nehmen.
    Ab .Net Framework 3.5 kannst du das sogar ganz schnell machen mittels Linq:

    VB.NET-Quellcode

    1. IO.File.WriteAllLines("Dateipfad", ListBox1.Items.Cast(Of String).ToArray)

    und drunter .Net 3.5 würde ich nen StreamWriter empfehlen:

    VB.NET-Quellcode

    1. Using sw As New IO.StreamWriter("Dateipfad", False)
    2. For Each l In ListBox1.Items
    3. sw.WriteLine(l)
    4. Next
    5. sw.Close()
    6. End Using


    Ich hoffe das wenn du schon nen absoluten Pfad angibst, dass du ihn dann nicht so zusammensetzt

    VB.NET-Quellcode

    1. "Pfad" & "Dateiname" & ".txt"

    wie das in deinem letzten Post war. "C:\Users\User\text.txt" ist vollkommen in Ordnung, oder du musst einen Pfad zusammensetzen,
    dann mach das per IO.Path-Klasse.
    Angenommen du hast einen Ordner ("C:\Users\User\") und eine Datei:

    VB.NET-Quellcode

    1. Dim defaultPath = "C:\Users\User\"
    2. Dim fileName = "HansPeter.txt"
    3. Dim absolutePath = IO.Path.Combine(defaultPath, fileName)

    mal so am Rande :P

    MfG Tim

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

    ChOoSeMyNaMe schrieb:

    IO.File.WriteAllLines(pfad, Listbox1.Items.ToArray)

    ListBox.Items ist aber keine explizite StringCollection oder String-List oder String Enumerable, sondern eine ObjectCollection. Deshalb enthält diese auch keinen ToArray() Member und man
    müsste stattdessen jedes Item durchgehen und als String casten. Die Linq-Erweiterung erleichtert uns das und castet direkt alle Objekte zu dem Typ unseres Wunsches und packt alles in den Array.
    Stimmt. Hänge einfach an die DataSource des Listbox-Steuerelements ein FileInfo und weise als DataMember den FullName zu.
    Hatte ich fürn kurzen Augenblick ignoriert, da es denke ich mal in erster Linie ums Speichern und Laden ging.
    Jou.
    @Visual_Prog Was soll Dein Programm tun?
    Was sind das für Daten?
    Wier arbeitest Du damit?
    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!

    Fortender schrieb:

    VB.NET-Quellcode

    1. ListBox.Items.Add(IO.File.ReadAllLines("[Dateipfad]"))


    Und ansonsten kann ich meinem Vorredner nur zustimmen :D


    hab das jetzte mal so versucht

    VB.NET-Quellcode

    1. TextBox1.Text = IO.File.ReadAllLines.combine(Pfad & L1 & ".txt")


    Pfad und L1 sind String Variablen für den Pfad und für den Dateinamen. Ich will das so schreiben, da L1 eine Variable für eine ListBox.Seletecitem darstellt.

    Fehler: Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "ReadAllLines" diese Anzahl von Argumenten akzeptiert.
    Ich glaube du hast mich da etwas missverstanden.
    Die Klasse IO.Path hat ne Methode die nennt sich Combine. Also dann IO.Path.Combine("path1","path2")
    Ich nehme an, dass L1 den Dateinamen ohne Extension (Erweiterung) darstellt. Dann müsste es nämlich korrekterweise so heißen:
    (Ich schreibe den zusammengesetzten Pfad extra zur Übersicht in eine Variable bevor ich ihn übergebe)

    VB.NET-Quellcode

    1. Dim combinedPath = IO.Path.Combine(Pfad, String.Concat(L1, ".txt"))
    2. TextBox1.Lines = IO.File.ReadAllLines(combinedPath)


    Das kannst du mal testen. Bei dem TextBox1.Lines bin ich mir nicht sicher, da ich damit nie gearbeitet habe. Sollte aber
    zumindest mal vom gleichen Typ sein.

    Probiers einfach mal. Falls du da was nicht verstehst. MSDN oder uns fragen :P

    MfG Tim
    ReadAllLines ist ja auch ein String-Array (eine Art Auflistung). TextBox.Text ist aber nur ein String, eine normale Zeichenkette. Du versuchst jetzt grad einen Apfel mit einem Apfelkorb zu vergleichen. Ich hoffe mein Beispiel ist verständlich genug :D Analog zu meiner Hilfestellung im letzten Post kannst du es versuchen mit:

    VB.NET-Quellcode

    1. If TextBox1.Lines <> IO.ReadAllLines(combinedPath) Then

    TextBox1.Text würde auch gehen, aber dann müsstest du statt ReadAllLines ReadAllText nehmen. Versuchs mal

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Fortender“ ()

    Soo wenns für Jemand interessant ist so siehts aus (muss das aber eben nochmal druchlaufen lassen^^):

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim LSI As String = ListBox1.SelectedItem
    3. Dim Pfad As String = "Pfad"
    4. Dim combinedPath = IO.Path.Combine(Pfad, String.Concat(LSI, ".txt"))
    5. Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
    6. If ListBox1.SelectedItem = "Eintrag1" Then
    7. TextBox1.Visible = True
    8. ElseIf ListBox1.SelectedItem = "Eintrag2" Then
    9. TextBox2.Visible = True
    10. ElseIf ListBox1.SelectedItem = "Eintrag3" Then
    11. TextBox3.Visible = True
    12. End If
    13. TextBox1.Lines = IO.File.ReadAllLines(combinedPath)
    14. TextBox2.Lines = IO.File.ReadAllLines(combinedPath)
    15. TextBox3.Lines = IO.File.ReadAllLines(combinedPath)
    16. End Sub
    17. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    18. If TextBox1.Text <> IO.File.ReadAllText(combinedPath) Then
    19. IO.File.WriteAllLines("pfad", ListBox1.Items.Cast(Of String).ToArray)
    20. ElseIf TextBox2.Text <> IO.File.ReadAllText(combinedPath) Then
    21. IO.File.WriteAllLines("Pfad", ListBox1.Items.Cast(Of String).ToArray)
    22. ElseIf TextBox3.Text <> IO.File.ReadAllText(combinedPath) Then
    23. IO.File.WriteAllLines("Pfad", ListBox1.Items.Cast(Of String).ToArray)
    24. End If
    25. End Sub
    26. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    27. TextBox1.Visible = False
    28. TextBox2.Visible = False
    29. TextBox3.Visible = False
    30. End Sub
    31. End Class

    Das programm beinhaltet eine Listbox mit Einträgen. Beim Doppelclick wird eine Textbox zum erscheinen gebracht. Dort kann man Notizen zu den ListBoxEinträgen schreiben. Beim schließen der Form wird der Text gespeichert. Beim Öffnen und Klicken auf den entsprechenden Eintrag wird der Text neu geladen : D

    Weiss Jemand wieso die Form nicht aufgerufen wird?^^

    VB.NET-Quellcode

    1. Dim LSI As String = ListBox1.SelectedItem


    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.