Datei einlesen, etwas darin ändern, speichern und wieder einlesen.

  • VB.NET

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

    Datei einlesen, etwas darin ändern, speichern und wieder einlesen.

    Hallo zusammen,

    Ich habe eine Datei, die ich in mein Programm einlesen möchte. Diese Datei möchte ich dann weiter verarbeiten. Das klappt auch alles.
    Mein Problem ist, dass ich am Anfang der Datei zwei Zeilenüberschriften habe, die weiter unten in der Datei identisch sind.
    Mein Programm beachtet dann nur die Infos in der Datei, die unter dieser ersten Zeilenüberschrift stehen.
    Also dachte ich mir, ich lese die Datei ein und suche die Zeilen die "doppelt" sind und ändere die Zeilenüberschriften. Damit eben die Zeilenüberschriften eindeutig sind.
    Das hat auch noch gut geklappt.

    Meine Frage: Kann man das irgendwie speichern, um die geänderte Datei im Programm weiter zu benutzen.
    Also ich meine, speichern in dem Sinne, dass das Programm wenn es gestartet wird, die Datei einliest, die Datei an den zwei Zeilen ändert, das Programm dann genau diese geänderte Datei verwendet.
    Ohne dass man die neue geänderte Datei wieder auswählen muss. Oder dass nach dem ändern der Zeilen, die Datei neu von oben, vom Anfang der Datei gelesen wird?

    Ich hoffe es ist einigermaßen verständlich und mir kann jemand helfen.

    Ich bin für jede Hilfe dankbar.

    LG VA7
    Hallo,

    mein Code zum Einlesen der Datei sieht so aus.

    VB.NET-Quellcode

    1. Dim Eingabedatei As String = "Geben Sie bitte die Eingabedatei ein!"
    2. Dim StreamReader As IO.StreamReader
    3. Dim existiert As Boolean = False
    4. Do
    5. Console.WriteLine(Eingabedatei)
    6. Eingabedatei = Console.ReadLine()
    7. Try
    8. StreamReader = New IO.StreamReader(Eingabedatei)
    9. existiert = True
    10. Catch ex As Exception
    11. Console.WriteLine("Achtung Fehler: Die Datei existiert nicht oder es wurde eine falsche Eingabe gemacht!")
    12. Console.WriteLine("Geben Sie bitte die Eingabedatei erneut ein!")
    13. Console.WriteLine(ex.Message)
    14. Console.WriteLine()
    15. End Try
    16. Loop Until existiert


    Anschließend wollte ich die Zeilen ändern, das hab ich dann so gemacht:

    VB.NET-Quellcode

    1. Dim arr() As String
    2. arr = IO.File.ReadAllLines(Eingabepfad)
    3. If arr(76).Contains("ÄNDERN") Then
    4. arr(76) = "BLA"
    5. End If
    6. If arr(81).Contains("ÄNDERN123") Then
    7. arr(81) = "TEST"
    8. End If


    Jetzt würde ich gerne die Datei so weiter verwenden wollen, dass sie eben sozusagen von vorne neu gelesen wird.
    Dass dann bei diesen Zeilen die ja geändert wurden, dass wenn ich z.B. sag if Zeile.Contains("BLA"), dann mach das und das.
    Dann tu das doch. Abspeichern und neu einlesen. Die File-Klasse enthält dazu ja genug Methoden (Tipp: ReadAllLines durch WriteAllLines ersetzen und Parameter anpassen), wobei der StreamReader und -Writer für Plaintext eigentlich besser ist, als die Read- und Write-Methoden der File.

    LG

    va7 schrieb:

    Jetzt würde ich gerne die Datei so weiter verwenden wollen, dass sie eben sozusagen von vorne neu gelesen wird.
    Wozu denn das?
    Wenn du arr grad geändert hast, und hast arr danach in die Datei geschrieben, wieso willste die Datei nu wieder nochmal einlesen?

    Weil ich garantiere: Da steht auch nix anneres drin, als was eh in arr steht, also das erneute Einlesen kannste dir sparen.
    Das war eine Lösungsidee von mir.
    In der Datei steht z.B. in der Zeile 2 "Zahlen" und da drunter die ganzen Werte. Dann steht in der Zeile 50 wieder "Zahlen" und da drunter andere Werte. Mein Programm hat mir aber nur die Berechnungen bis zu der Zeile 50 gemacht und in eine neue Datei gespeichert.
    Die ganzen Werte unter der Zeile 50 wurden nicht berücksichtigt bzw. so habe ich es interpretiert.
    Also habe ich mir gedacht, wenn ich die Zeile 50 umbenenne von "Zahlen" in "Test" und dann meinen Code darauf noch ändere, dass er dann alle Werte beachtet und berechnet.
    Aber wahrscheinlich habe ich da auch ein Fehler gemacht, so dass er die Werte ab Zeile 50 trotzdem nicht berechnet hat.

    Trotzdem danke an alle.