Datenliste aus textdatei in textbox wiedergeben

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

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

    Datenliste aus textdatei in textbox wiedergeben

    Hi auch wenn ich hier jetzt versuche genau zu schreiben was ich möchte bin ich immer noch ein laie und verste nicht alles :)

    Also ich habe eine textdatei mit inhalten beispiel :


    Andreas:01 | Wert 20 | 99
    Andreas:01 | Wert 20 | 99
    Andreas:01 | Wert 20 | 99
    Andreas:01 | Wert 20 | 99
    Andreas:01 | Wert 20 | 99
    Andreas:01 | Wert 20 | 99


    Dantürlich stehen in jeder reihe andere werte aber soll ja nur den aufbau des textdokumentes zeigen

    Nun möchte ich das das gesammte textdokument einlesen und immer auf knopdruck die nächste zeile in mehrere textboxen wiedergeben

    Ein weiterer button soll den eintrag löschen können aus dem textdokument wenn er nicht beötigt wird

    So ich hab kein plan wie ich das anstellen soll vieleicht hat jemand ja ne idde


    Danke schonmal im vorraus
    @bigbase Lies die Datei mit ReadAllLines(...) in ein Array ein.
    Merke Dir in der Klasse die aktuelle Zeile und verewende bei Button_Click die Zeile mit diesem Index und erhöhe den Index um eins.
    Feddich.
    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!
    Das einlesen ist nicht das problem das habe ich aber wie ich dann weitergehen soll ich stehe auf dem schlauch und google hilft mir grade auch nicht weiter :(

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. Dim objReader As New StreamReader("PFAD")
    3. Dim sLine As String = ""
    4. Dim arrText As New ArrayList()
    5. Do
    6. sLine = objReader.ReadLine()
    7. If Not sLine Is Nothing Then
    8. arrText.Add(sLine)
    9. End If
    10. Loop Until sLine Is Nothing
    11. objReader.Close()
    12. For Each sLine In arrText
    13. TextBox1.Text = (sLine)
    14. Next
    15. End Sub
    16. End Class


    So weit bin ich aktuell und komme nun nicht weiter

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

    bigbase schrieb:

    ich stehe auf dem schlauch
    Lies Dir mal die zweite Zeile aus Post #2 gaaaaaanz genau durch. Verstehe sie und setze sie um.
    Und:
    Das Array muss natürlich aus der Prozedur in die Klasse, das Einlesen jedoch nicht.
    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!
    Zunächstmal: in der Datei stehen offensichtlich Datensätze.
    Und zwar scheint jeder Datensatz 3 Properties zu haben - was fehlt sind die Namen der Properties - denkbar wäre etwa:
    1) Name, 2) Wert, 3) Zahl.

    Oder man kann den Datenbestand auch als Tabelle auffassen. Dann sind es die Tabellenüberschriften, die fehlen.

    Gib uns bitte die Tabellenüberschriften / PropertyNames, dann kann man besser helfen.
    Du kannst sie frei bestimmen, versuche aber, Namen zu wählen, die möglichst viel Sinn ergeben. Etwa in meim Vorschlag, die Property "Zahl" ist keine gute Benamung, aber ich weiss halt nicht, was die Zahl bedeutet, ob es eine ID ist, eine Anzahl von Suche-Treffern oder whatever.
    (Property "Wert" ist genauso schlecht benamt - finde Namen, die wirklich aussagen für was die Eigenschaft gut ist)

    Übrigens: Diese Überlegungen / Probleme sind als erstes zu lösen.
    Andernfalls kannst du wunderbar deine Datei auslesen, blos mit dem Ausgelesenen - wohin?? ?(
    Also ich konnte nun alles einlesen und splitten nun fehlt mir die schleife die immer +1 macht und das löschen der einzellnen zeilen

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. Dim objReader As New StreamReader("PFAD")
    3. Dim sLine As String = ""
    4. Dim arrText As New ArrayList()
    5. Do
    6. sLine = objReader.ReadLine()
    7. If Not sLine Is Nothing Then
    8. arrText.Add(sLine)
    9. End If
    10. Loop Until sLine Is Nothing
    11. objReader.Close()
    12. For Each sLine In arrText
    13. Dim stringArray = sLine.Split({":", " | ", " | "}, StringSplitOptions.None)
    14. TextBox1.Text = stringArray(0)
    15. TextBox2.Text = stringArray(1)
    16. Textbox3.Text = stringArray(2)
    17. Next
    18. End Sub
    19. End Class

    bigbase schrieb:

    nun fehlt mir die schleife die immer +1 macht
    Bist Du beratungsresistent?
    Fang an und lies Dir Deinen ersten Post durch.
    Das gelesene vergleiche mit meinem Vorschlag und Deinem Code aus Post #6.
    Was mmacht der StreamReader :?:
    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!
    Also ich würde folgendermaßen vorgehen.
    Schreibe eine Funktion welche die Textdatei in ein List(Of String) einließt.
    Erstelle eine Eigenschaft des Typs int und benenne Sie SelectedIndex.
    Im Click Event des "Nächste Zeile" Buttons addierst du zu SelectedIndex 1 dazu, holst dir den Eintrag der List(Of String) an dem Index = SelectedIndex, splittest die Werte und schreibst Sie in deine Textboxen.

    Um Den Eintrag zu entfernen:
    Im Click Event des "Löschen" Buttons führst du auf der List(Of String) "RemoveAt(SelectedIndex)" aus.

    MfG Mika
    @bigbase Du warst zu schnell, ich war mit Post #7 noch nicht feddich.
    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!
    Hier erzählen eigentlich alle sogut wie das selbe. Die netten Herren @RodFromGermany und @ErfinderDesRades nehmen dich allerdings gemeinsam auf die Reise das Problem zu lösen und geben dir Tipps und Erklärungen, keinen fertigen Code.

    Überleg dir was du für dein Problem brauchst.
    Du brauchst ein Objekt welches deine Zeilen aus der Textdatei hält um darauf zuzugreifen.
    Du musst den Index der aktuellen Position speichern. Damit du weißt welches die aktuelle, nächste und vorherige Zeile ist/war.

    bigbase schrieb:

    jeder sagt was anderes
    Das ist nun mal so hier im Forum.
    Dein Part isses, die richtigen Posts zu ignorieren (also die falschen). ;)
    Je präziser und detaillierter Deine Problembeschreibung / Aufgabenstellung ist, um so leichter lässt es sich helfen.
    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!

    Mika2828 schrieb:

    Hier erzählen eigentlich alle sogut wie das selbe. Die netten Herren @RodFromGermany und @ErfinderDesRades nehmen dich allerdings gemeinsam auf die Reise das Problem zu lösen und geben dir Tipps und Erklärungen, keinen fertigen Code.

    Überleg dir was du für dein Problem brauchst.
    Du brauchst ein Objekt welches deine Zeilen aus der Textdatei hält um darauf zuzugreifen.
    Du musst den Index der aktuellen Position speichern. Damit du weißt welches die aktuelle, nächste und vorherige Zeile ist/war.


    Ich schreibe hier viel lange und nicht das erste mal, Ich weis wie ein forum läüft ich habe verschiedene codeansäte ausprobiert welche ich versucht habe wenn man feststeckt steckt man fest das ist nunmal so.
    Ich vermute es soll so aussehen wa??

    VB.NET-Quellcode

    1. Dim DatenArray() As String = IO.File.ReadAllLines("PFAD")
    2. For Each Zeile As String In DatenArray
    3. Dim stringArray = Zeile.Split({":", " | ", " | "}, StringSplitOptions.None)
    4. TextBox1.Text = stringArray(0)
    5. TextBox2.Text = stringArray(1)
    6. TextBox3.Text = stringArray(2)
    7. Next

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

    War auch eigentlich nicht böse gemeint.

    Du wirst die Anforderungen Textdatei einlesen, Werte anzeigen, nächster wert und wert löschen allerdings nicht in eine Funktion bekommen.
    Die einzelnen Anforderungen müssen also in verschiedene Funktionen aufgeteilt werden.

    VB.NET-Quellcode

    1. Private DatenArray As List(Of String) = Nothing
    2. Private SelectedIndex As Integer = 0
    3. Public Sub ReadTextDatei(pfad As String) 'Wird vom Button "Textdatei einlesen" aufgerufen
    4. DatenArray = New List(Of String)(IO.File.ReadAllLines(pfad))
    5. End Sub
    6. Public Sub ShowValues(index As Integer)
    7. If DatenArray Is Nothing Then
    8. Return
    9. End If
    10. If index < 0 OrElse index > DatenArray.Count() Then
    11. Return
    12. End If
    13. Dim values As String() = DatenArray(index).Split("|")
    14. TextBox1.Text = values(0)
    15. TextBox2.Text = values(1)
    16. TextBox3.Text = values(2)
    17. End Sub
    18. Public Sub NextValues()
    19. 'Im Button "Nächste Zeile" aufrufen
    20. SelectedIndex += 1
    21. ShowValues(SelectedIndex)
    22. End Sub


    So ähnlich. Hoffe du hast eine Idee bekommen.

    MfG Mika

    bigbase schrieb:

    Ich vermute es soll so aussehen wa??
    Überlege genau, was dann jedesmal in den Textboxen steht.
    Wo sollen denn die Daten tatsächlich hin?
    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!
    Jo - hast schon recht - Rod und ich erzählen fundamental unterschiedliches.
    Rod versucht zu helfen, das Problem so zu lösen, wie du dir die Lösung vorstellst - Mit Messageboxen, die man zeilenweise eine nach der anderen wegklicken muss.

    Ich hingegen bin da evtl. einen Schritt weiter - ich finde deine gewünschte Lösung offen gestanden recht bescheuert - wer sollte denn sowas benutzen wollen?
    Was ich stattdessen vorschlage ist, die Daten in einem Datagridview-Control anzuzeigen, das sieht dann in etwa wie eine Excel-Tabelle aus.
    Da sieht man dann alle Datensätze auf einmal, und kann sie auch viel besser bearbeiten, als wenn man sich durch hunderte Messageboxen klicksen muss.