Suchen ersetzen in Text Datei

  • Hallo Zusammen Habe folgendes Script geschrieben
    eine Textdatei wird geöffnet und mit StringRepalce wird eine Zeichenfolge ersetzt was auch klappt nur wird die Datei nicht verändert wenn die Datei geöffnet wird steht immer noch der Alte Wert drin was mach ich falsch ? ich hoffe ihr könnt mir helfen


    [autoit]

    $name = inputbox("test", "Namen eingeben", "")
    $file = FileOpen("H:\test\test.txt", 0)

    [/autoit][autoit][/autoit][autoit]

    ;While 1
    $line = FileRead($file)

    [/autoit][autoit][/autoit][autoit]

    ;If @error = -1 Then ExitLoop
    MsgBox(0, "Zeile gelesen:", $line)
    ;Wend

    [/autoit][autoit][/autoit][autoit]

    $fertig = StringReplace($line, "pcxphome", $name, 1)

    [/autoit][autoit][/autoit][autoit]

    msgbox("", "Name" , $fertig)

    [/autoit][autoit][/autoit][autoit]

    ; Prüfen, ob Datei zum Lesen geöffnet wurde
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    FileClose($file)

    [/autoit]

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Greets bitworker

  • Hallo bitworker,

    du hast zwar die Datei gelesen und auch den Text ersetzt, aber du hast das Schreiben vergessen.
    Füge in Zeile 10 ein FileClose ein und am Ende vor dem abschliessenden FileClose ein FileOpen mit dem modus 2 und FileWrite ein, lies die die Stichpunkte in der Hilfe durch.
    Auch liest dein Skript nur die 1. Zeile einer Datei (ist sie nicht länger?)

    mfg (Auto)Bert

  • Danke für die schnellen Antworten
    @Fisch 

    Zitat

    Du hast bei FileOpen() den falschen Flag gesetzt, 1 wäre richtig

    Wenn ich bei FileOpen den Mode auf eins setze dann ist nach dem Programmablauf die Datei leer oder findet keinen String mehr ganz komisch oder ?

    autoBert
    habe deinen Ratschlag befolgt und es funktioniert soweit aber kann ich mit AutoIt immer nur am Ende einer Textdatei schreiben viel besser wäre nur bestimmte Zeichen folgen zu ersetzten die in einer bestimmten Zeile stehen . FileRead ohne Angaben liest glaub ich immer die ganze Datei oder irre ich mich ? gibt es eine Möglichkeit den Quellcode zu optimieren oder anderst zu schreiben ?

    Danke Greets bitworker

  • Mach das ganze einfach ohne fileopen(), dürfte ja auch klappen. Und dann brauchst du auch keinen Modus angeben.

    Zitat

    Wenn ich bei FileOpen den Mode auf eins setze dann ist nach dem Programmablauf die Datei leer oder findet keinen String mehr ganz komisch oder ?


    Stimmt, das habe ich übersehen. Flag 1 ist nur Schreibmodus.

    Edit: z.B. so:

    [autoit]

    $file = "test.txt"

    [/autoit][autoit][/autoit][autoit]

    $read = FileRead($file)
    If $read = "" Then Exit

    [/autoit][autoit][/autoit][autoit]

    $name = InputBox("","")
    MsgBox(0,"",StringReplace($read, "pcxphome", $name))

    [/autoit]

    2 Mal editiert, zuletzt von Fisch (25. Mai 2009 um 22:34)

  • Hallo bitworker,

    Zitat

    habe deinen Ratschlag befolgt und es funktioniert soweit aber kann ich mit AutoIt immer nur am Ende einer Textdatei schreiben


    Wenn du beim Öffnen vor dem Screiben den Modus 2 nimmst wird die Datei automatisch neu erstellt und nicht hinten angehängt.

    Zitat

    viel besser wäre nur bestimmte Zeichen folgen zu ersetzten die in einer bestimmten Zeile stehen . FileRead ohne Angaben liest glaub ich immer die ganze Datei oder irre ich mich ?


    Wenn du an Stelle von FileRead _FileReadToArray nimmst, kannst du Zeile für Zeile in dem Array bearbeiten, Achtung Array[0] beinhaltet die Anzahl der Zeilen.Mit _FileWriteToArray kannst du dann das ganze Array in eine Datei schreiben, Achtung Array[0] darf nicht mitweggeschrieben werden.
    mit FileRead hast du recht es liest die ganze Datei ein wenn keine Zeile angegeben ist.

    Zitat

    gibt es eine Möglichkeit den Quellcode zu optimieren oder anderst zu schreiben ?

    Du kannst auch _ReplaceStringInFile verwenden um entweder das erste Vorkommen oder alle Vorkommen des Suchstrings zu ersetzen.

    mfg (Auto)Bert

  • So kann jetzt ein Zwischenergebnis präsentieren dank eurer Hilfe echt ein klasse Forum :rock: :rock: :rock:


    [autoit]

    $name = inputbox("PC Name", "Namen eingeben", "")
    $name1 = inputbox("Namen", "Namen eingeben", "")
    $name2 = inputbox("Firma", "Namen eingeben", "")

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen("H:\test\test.txt", 0)
    $line = FileRead($file)

    [/autoit][autoit][/autoit][autoit]

    ;If @error = -1 Then ExitLoop
    MsgBox(0, "Zeile gelesen:", $line)

    [/autoit][autoit][/autoit][autoit]

    $fertig = StringReplace($line, "ComputerName=", "ComputerName=" & $name, 1)

    [/autoit][autoit][/autoit][autoit]

    $fertig1 = StringReplace($line, "FullName=", "FullName=" & $name1, 1)

    [/autoit][autoit][/autoit][autoit]

    $fertig2 = StringReplace($line, "OrgName=", "OrgName=" & $name2, 1)

    [/autoit][autoit][/autoit][autoit]

    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    ; Prüfen, ob Datei zum Lesen geöffnet wurde
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    msgbox("", "Name" , $fertig)

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen("H:\test\Kunde\test.txt",2)
    FileWriteLine($file, $fertig)
    FileWriteLine($file, $fertig1)
    FileWriteLine($file, $fertig2)
    FileClose($file)

    [/autoit][autoit][/autoit][autoit][/autoit]

    Nun brauch ich aber nochmal eure Hilfe wie kann ich es den realisieren das die Änderung die in

    [autoit]

    $fertig1

    [/autoit]

    und

    [autoit]

    $fertig2

    [/autoit]

    auch mitgeändert werden im Moment schreibt er dreimal die ganze Datei setzt die Werte aber richtig die über die Inputbox einegebebn werden

    Zeile 1
    Zeile 2
    ComputerName=pcxphome
    FullName=
    OrgName=
    Zeile 1
    Zeile 2
    ComputerName=
    FullName=ich
    OrgName=
    Zeile 1
    Zeile 2
    ComputerName=
    FullName=
    OrgName=chef

    Welche Schleife oder Technik kann ich den anwenden ??

    Danke Greets bitworker