StreamWriter schreibt Doppelt in Datei

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    StreamWriter schreibt Doppelt in Datei

    Hi Leute!

    Kleine Frage, ich versuche mithilfe des Streamwriters und Regex.Replace diverse Wörter in einer Datei zu ersetzten.

    Dies scheitert daran, dass der zuvor eingelesene Text (Mehrer Zeilen) 2 mal in der Datei erscheint.

    Hier mal der Codeausschnitt um den es geht:


    VB.NET-Quellcode

    1. Dim FileReader As New System.IO.StreamReader("C:\Vorlagen\xxx.htm")
    2. FileReader = My.Computer.FileSystem.OpenTextFileReader("C:\Vorlage\xxx.htm")
    3. Dim FileParser As String
    4. FileParser = FileReader.ReadToEnd
    5. FileReader.Close()
    6. Dim FileWriter As New System.IO.StreamWriter("C:\Vorlagen\xxx.htm")
    7. Dim sNAme As String = Regex.Replace(FileParser, PSEUDO_1, "VORNAME+NAME")
    8. Dim sAbteilung As String = Regex.Replace(FileParser, PSEUDO_2, "ABTEILUNG")
    9. FileWriter.WriteLine(sNAme)
    10. FileWriter.WriteLine(sAbteilung)
    11. FileWriter.Close()



    Das Problem ist das "FileWriter.WriteLine(sAbteilung)", dadurch wird es das 2 mal geschrieben.

    Gibt es eine Möglichkeit das man die Datei in einem Rutsch verändert? Es sollen insgesamt 8 Platzhalter verändert werden.


    Ergebnis:

    VORNAME+NAME
    @SIGNTITLE@

    XXX - @STREET@ - @POSTCODE@ @CITY@ - Germany
    Tel. @PHONE@ | Fax: @FAX@
    Mobil: @MOBILE@ | @EMAIL@ | XXX




    Mit besten Grüßen / Best regards
    @FULLNAME@
    ABTEILUNG

    XXX - @STREET@ - @POSTCODE@ @CITY@ - Germany
    Tel. @PHONE@ | Fax: @FAX@
    Mobil: @MOBILE@ | @EMAIL@ | XXX
    Wie man sieht, ist der erste Teil mit VORNAME+NAME und der zweite Teil mit ABTEILUNG.



    Grüße

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Top44“ ()

    Lies den Text doch erst komplett ein... Ändere innerhalb des Programms was zu ändern ist und schreib dies Abtei dann ganz neu.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Siehe FlashTek... sorg bitte zunächst dafür, dass der Quelltext ordentlich lesbar ist. Informationen darüber, wie das am besten und einfachsten geht, findest du hier: [01 Forum] Bitte VB-Tag(s) benutzen - was ist damit gemeint? Oder: Wie füge ich Quellcode korrekt im Forum ein?
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Setz mal einen Haltepukt rein (F9) und sieh Dir dann an, was RegEx ausspuckt. Ich denke mal, Deine Filter sind nicht korrekt. :S
    Im unterbrochenen Zustand Klick auf die Variable, Shift+F9.
    Gugst Du hier.
    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!
    Ja Danke, es wird ja alles soweit verändert wie er es soll. Sprich die Ausgabe ist ansich ja "Richtig" nur kommt er Doppelt..

    Info: Bei den beiden Regex.Replace musste ich die Zu replacende Werte ändern, weil die Formatierung nicht passe.

    Grüße
    @Top44
    Ich habs jetzt nicht getestet aber versuchs mal so:

    VB.NET-Quellcode

    1. Dim text As String = textausdatei.Replace(PSEUDO_1, "VORNAME+NAME").Replace(PSEUDO_2, "ABTEILUNG")

    Und diesen Text schreibst du dann in deine Datei ;)

    Ich würde an deiner Stelle übrigens noch Using verwenden :)

    Gruß
    Switcherlapp97

    EDIT: Zu langsam ;)
    Noch eine kurze Erklärung wieso es zuerst zweimal in die Datei geschrieben hat: Du hast die sNAme-Variable in der du den kompletten Text aus der Textdatei nur mit der Replaceänderung. In der sAbteilung Variable nimmst du erneut den kompletten Text aus der Datei (nicht den bereits abgeänderten). Jetzt hast du einmal in sName den kompletten Text aus der Datei und einmal in sAbteilung. Du schreibst beide Variablen in deine Datei -> Zwei mal den ganzen Eingangstext mit den Änderungen in deiner Zeildatei.
    RubiksCubeSolver


    Jetzt im Showroom

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

    Using ist die allgemein zu verwendende Methode, um mit Typen umzugehen, die IDisposable implementieren (wie das z.B. der StreamReader tut).
    Wenn du meinen Code nimmst, brauchst du das aber nicht, weil du dir da ja die ganzen Reader und Writer sowieso sparst.