Textdatei durchsuchen und ans Ende einer Zeile schreiben

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Textdatei durchsuchen und ans Ende einer Zeile schreiben

    Hallo zusammen,

    vielleicht kann sich jemand in mein Problem reindenken und mir ein paar Tipps geben.
    Ich habe eine Textdatei welche ich nach mehreren Werten durchsuchen möchte (im Quellcode ist der suchende Wert im String strteile(1), eine 2 oder dreistellige Zahl).

    Die Textdatei Test.txt die durchsucht werden soll, kann wie folgt ausschauen:

    612,1
    623,5
    626,3


    wenn der String in der Textdatei vorhanden ist z.B 612, dann soll ans Ende der Zeile eine 1 eingefügt werden:

    612,1,1
    623,5
    626,3


    Wenn der Wert nicht vorhanden ist z.B. 712, soll ans Ende eine Zeile eingefügt werden:

    612,1
    623,5
    626,3
    712,0,1


    Wenn alle Strings in der Textdatei geprüft wurden, soll an die Zeilen wo nichts geändert wurde, eine ",0" angefügt werden

    612,1,1
    623,5,0
    626,3,0
    712,0,1



    Zwischen Zeile 14 - 26 ist der Code mit dem ich dies umsetzen wollte, allerdings stehe ich seit mehreren Tagen auf dem Schlauch. Hier mal der derzeitige Code

    VB.NET-Quellcode

    1. Path1 = "V:\Test.txt"
    2. tempstring1 = System.IO.File.ReadAllLines(Path1)
    3. ' Zeilenweise text einlesen und in Variablen speichern
    4. While zaehler1 < tempstring1.Length
    5. If tempstring1(zaehler1).StartsWith("HZ") Then
    6. 'Splitten der Textdatei
    7. dummy = tempstring1(zaehler1) ' HZ/120,2,3
    8. dummy = dummy.Replace("/", "/ ") ' HZ/ 120,2,3
    9. dummy = dummy.Replace(",", " , ") ' HZ/ 120 , 2 , 3
    10. strTeile = dummy.Split(" ") ' Array0 (HZ/)
    11. ' -----------------------------------------------------------------------------------------------------
    12. Dim line1 As String
    13. Dim file As System.IO.StreamReader = New System.IO.StreamReader("C:\HZ.txt")
    14. Do
    15. line1 = file.ReadLine()
    16. If line1.Contains(strTeile(1)) Then ' Ist vorhanden Ans Ende schreiben
    17. Else ' Ist nicht vorhanden, neue Zeile
    18. End If
    19. Loop Until line1 Is Nothing
    20. file.Close()
    21. '------------------------------------------------------------------------------------------------
    22. End If
    23. zaehler1 += 1
    24. End While
    @JoachimFürstner Willkommen im Forum. :thumbup:
    Hast Du nun eine Textdatei oder zwei davon: "V:\Test.txt", "C:\HZ.txt"?
    Lies die Datei in ein String-Array ein und arbeite damit. etwa so:

    VB.NET-Quellcode

    1. Dim lines = System.IO.File.ReadAllLines("C:\Temp\HZ.txt").ToList()
    2. lines(0) &= ".bla"
    3. lines.Add("bla bla")
    4. System.IO.File.WriteAllLines("C:\Temp\HZ_neu.txt", lines.ToArray())
    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!
    Danke für's willkommen heißen und die sehr schnelle Antwort. Das hilft mir schonmal sehr.

    In der Datei Test.txt sind die Werte, die ich in der Datei HZ.txt suche.

    Dennoch eine Frage, gibt es eine Abfrage .Length für die Länge der Liste ?

    VB.NET-Quellcode

    1. Dim lines = System.IO.File.ReadAllLines("C:\U\NC\ZEIT\HZ.txt").ToList()
    2. For j As Integer = 0 To 'Länge der Liste ?!?!
    3. If lines(j).Contains(strTeile(1)) Then
    4. lines(j) &= "," + strTeile(3)
    5. End If
    6. Next
    7. System.IO.File.WriteAllLines("C:\U\NC\ZEIT\HZ.txt", lines.ToArray())

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „JoachimFürstner“ ()

    Ebenfalls willkommen.
    Lines.Count, und somit For j As Integer = 0 To Lines.Count - 1
    Aber es geht auch ohne:

    VB.NET-Quellcode

    1. For Each Line In Lines
    2. If Line.Contains(strTeile(1)) Then Line &= "," + strTeile(3)
    3. Next

    btw: ungarische Notation (Benennung einer Variablen mit Datentyp als Präfix) ist obsolet, aber Geschmackssache
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Aber es geht auch ohne
    Glaub ich nicht, weil die List-Member bei ForEach nicht aktualisiert werden.
    Muss mal getestet werden.
    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!
    Shame on me. Hast recht. String ist ja kein Instanzklassentyp.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.