Einzeln Zeile in TXT ersetzen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von cl10k.

    Einzeln Zeile in TXT ersetzen

    Hallo Forum^^

    ich habe mit Hilfe des Forums versucht eine Prozedur zu erstellen, mit der ich eine einzelne Zeile (mitten) in einer Textdatei ersetzen kann.
    Das hier ist mein erster Versuch und wie erwartet funktioniert das Ganze nicht.

    Mein Ansatz war

    1) komplette Datei Zeilenweise einlesen in List(of String)
    2) Zeilen nach "MUSTER" durchsuchen und ganze Zeile durch "TEST" ersetzen
    3) List(of String) zurück in die Datei schreiben

    Quellcode

    1. Sub zeile_aendern(ByVal datei As String)
    2. Dim str As New StreamReader(datei)
    3. Dim text As New List(Of String)()
    4. 'Datei einlesen
    5. MsgBox("los gehts")
    6. While Not str.EndOfStream
    7. text.Add(str.ReadLine())
    8. End While
    9. str.Close()
    10. str.Dispose()
    11. MsgBox("einlesen fertig")
    12. 'Zeile finden und ersetzen
    13. For Each zeile As String In text
    14. If zeile.Contains("MUSTER") Then
    15. zeile = "TEST"
    16. MsgBox("Zeile gefunden")
    17. End If
    18. Next
    19. Dim stw As New StreamWriter(datei, False)
    20. 'Datei zurückschreiben
    21. For Each zeile As String In text
    22. stw.WriteLine(zeile)
    23. Next
    24. stw.Flush()
    25. stw.Close()
    26. stw.Dispose()
    27. MsgBox("schreiben fertig")
    28. End Sub


    Aber nichts geschieht. Die gesuchte Zeile wird nicht ersetzt.
    Was läuft da schief? Ich bin für jeden Tipp dankbar

    lg Christian

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

    ich denke du müsstest für solche fälle auch ein Replace nutzen.
    Meine Idee wäre folgende, ich weiß nur nicht ob dir das ausreichen würde.
    ich würde alle Zeilen über einen Stringbuilder einfangen

    VB.NET-Quellcode

    1. Dim StrBuilder As New StringBuilder
    2. For Each zeile As String In Text
    3. If zeile.Contains("MUSTER") Then
    4. StrBuilder.AppendLine("MeinText")
    5. MsgBox("Zeile gefunden")
    6. Else
    7. StrBuilder.AppendLine(zeile)
    8. End If
    9. Next


    LG.L
    Wenn Du einen mehrzeiligen Text bearbeiten willst, kannst Du ihn als solchen behandeln:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim text() As String = System.IO.File.ReadAllLines(DEIN_PFAD)
    2. 'Zeile finden und ersetzen
    3. dim zeile As String
    4. For i As Integer = 0 To text.Count - 1
    5. zeile = text(i)
    6. If zeile.Contains("MUSTER") Then
    7. text(i) = "TEST" ' so wird zurückgespeichert!
    8. MsgBox("Zeile gefunden")
    9. Exit For
    10. End If
    11. Next
    12. System.IO.File.WriteAllLines(DEIN_PFAD, text)
    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 euch beiden!

    @Rod: Klappt prima :) und sieht elegant aus....

    ABER ein Problem besteht noch. Beim Schreiben entsteht am Ende der Datei eine Leerzeile, die in der Quelldatei nicht vorhanden ist (ist wahrscheinlich der Zeilenumbruch am Ende der letzten Zeile).
    Wie kann ich diese Leerzeile verhindern? (Die Datei ist eine Config für ein anderes Programm und der Hersteller warnt ausdrücklich davor am Ende eine Leerzeile zu erstellen...)


    lg Christian
    Dann musst Du die Zeilen halt zeilenweise 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!