StringReplace keine Änderung

  • Hallo,

    brauche dringend eure Hilfe.
    Ich probiere schon den ganzen morgen
    das hinzubekommen:

    Ich möchte in einer bestehenden Datei
    Texte ändern, aber es passiert leider nichts!

    [autoit]


    $sSource = FileOpen(@ScriptDir & "\test.txt", 0)
    $sSource = FileRead($sSource)
    $rep = StringReplace($sSource, "DOCTYPE html", "Das ist der neue Text")
    FileClose($sSource)

    [/autoit]

    Grüße
    Ilse ;)

    3 Mal editiert, zuletzt von Ilse (30. Juni 2011 um 15:30)

  • DU benutzt mehrmals die selbe Variable $sSource

    [autoit]

    $sSource = FileOpen(@ScriptDir & "\test.txt", 0)
    $sSource2 = FileRead($sSource)
    $rep = StringReplace($sSource2, "DOCTYPE html", "Das ist der neue Text")
    FileClose($sSource)

    [/autoit]

    Und das was du ersetzt hast, speicherst du ja nirgends wieder ab ^^

    [autoit]

    FileWrite($sSource, $rep)

    [/autoit]
  • @alle,

    hab nochmals alles geprüft, aber es passiert absolut nichts!

    Hier ist die Textdatei

    Spoiler anzeigen


    </b><span>1Rud 4Wlp</span>
    </b><span>4Rud 51Wlp</span>
    </b><span>3Rud 13Wlp</span>
    </b><span>12Rud 11Wlp</span>
    </b><span>13Rud 4Wlp</span>

    Zitat


    Achtung: im Forum werden diese Zeichen nicht gezeigt!!!!
    & # 1 6 0 ;


    diese sind hinter Rud ohne Leerzeichen!

    Die Textdatei autoit.de/wcf/attachment/13641/

    So, diese seltsamen Zeichen möchte ich durch ein Leerzeichen ersetzen!

    Mein Code

    [autoit]


    $sSource = FileOpen(@ScriptDir & "\test2.txt", 0)
    ;Msgbox(0,"",$sSource)
    $sSource = FileRead($sSource)
    $rep = StringReplace($sSource, "Hier stehen die Zeichen die im Forum leider nicht gezeigt werden", " ")
    FileWrite($sSource, $rep)
    FileClose($sSource)

    [/autoit]

    Hatte auch $sSource2 probiert, kein Erfolg!
    Grüße
    Ilse ;)

  • Schau dir mal die hilfe zu FileOpen an, du hast als letzten Parameter 0 da stehen ;)

    [autoit]


    #include <File.au3>
    $sSource = FileOpen(@ScriptDir & "\test2.txt", 0)
    ;Msgbox(0,"",$sSource)
    $sSource = FileRead($sSource)
    FileClose($sSource)
    $rep = StringReplace($sSource, "Hier stehen die Zeichen die im Forum leider nicht gezeigt werden", " ")
    _FileCreate(@ScriptDir & "\test3.txt")
    $hFile = FileOpen(@ScriptDir & "\test3.txt", 2)
    FileWrite($hFile , $rep)
    FileClose($hFile)

    [/autoit]
  • Der Fehler besteht darin, daß du die File noch zum Lesen geöffnet hast, dann kannst du nix rein schreiben...

    So sollt's gehen:

    [autoit]

    $sSource = FileOpen(@ScriptDir & "\test2.txt", 0)
    ;Msgbox(0,"",$sSource)
    $sSource2 = FileRead($sSource)
    FileClose($sSource)
    $rep = StringReplace($sSource2, "Hier stehen die Zeichen die im Forum leider nicht gezeigt werden", " ")
    $sSource = FileOpen(@ScriptDir & "\test2.txt", 2)
    FileWrite($sSource, $rep)
    FileClose($sSource)

    [/autoit]

    Edit:
    TheLuBu du kannst eine Zeile sparen:

    [autoit]

    _FileCreate(@ScriptDir & "\test3.txt")

    [/autoit]


    Ich zitiere mal die Hilfe unter FileOpen()

    Zitat

    Wird eine Datei im Schreibmodus (write mode) geöffnet, so wird die Datei erstellt, falls sie noch nicht existiert.

    [/Klugscheiss-Modus] :D

    UNPLEASANT SPOILER

    You just lost the game!

    3 Mal editiert, zuletzt von shadow667 (29. Juni 2011 um 13:01)

  • [autoit]


    $sSource = FileOpen(@ScriptDir & "\test2.txt", 0) ;Öffnet die Datei mit Lesezugriff und speichert einen Filepointer in $sSource (Bsp. 23)
    $sSource = FileRead($sSource) ;FileRead speichert den Inhalt der Datei auf die der Pointer verweist in $sSource (Bsp. Abcd)
    $rep = StringReplace($sSource, "Hier stehen die Zeichen die im Forum leider nicht gezeigt werden", " ")
    FileWrite($sSource, $rep) ;FileWrite() wird mit ungültigen Parametern aufgerufen. In $sSource steht nun der Inhalt der Datei und der Filepointer ist nicht mehr vorhanden. Ausserdem wurde die Datei in Zeile 1 mit dem Parameter 0 geöffnet => Nur zum lesen.
    FileClose($sSource) ;FileClose wird mit ungültigen Parametern aufgerufen. In $sSource steht nun der Inhalt der Datei und der Filepointer ist nicht mehr vorhanden.

    [/autoit]


    Generell ist diese Art auch sehr unsauber. Einen Filepointer, solltest du niemals mit anderen Werten überschreiben.
    Dann sieht das ganze so aus.

    [autoit]


    $fp = FileOpen(@ScriptDir & "\test2.txt",2) ;$fp für filepointer. Gängig wäre auf $fp_test2 wenn der Handle länger verwendet werden soll um die Übersicht zu wahren. Wichtig hier, datei wird nur zum lesen geöffnet.
    $sSource = FileRead($fp) ;FileRead speichert den Inhalt der Datei auf die $fp verweist in $sSource
    FileClose($fp) ;Schließen der Datei, da lesen beendet wurde.
    $rep = StringReplace($sSource, "Hier stehen die Zeichen die im Forum leider nicht gezeigt werden", " ")
    $fp = FileOpen(@ScriptDir & "\test2.txt",2) ;Datei wird erneut geöffnet, diesmal aber mit schreibzugriff. Hierbei kann die selbe $fp Variable benutzt werden, da wir Zeile 4 die Offene Datei bereits geschlossen haben und er $fp damit wieder "frei" ist.
    FileWrite($fp, $rep) ;FileWrite() schreibt die Daten in die Datei.
    FileClose($$fp) ;Datei wird wieder geschlossen.

    [/autoit]
  • Hallo,

    und merci erstmal für die Hilfe.
    Jetzt muß ich mich doch nochmal zu dem Thema StringReplace melden!

    Eine andere Variante die ebenfalls nicht funktioniert!

    [autoit]


    $sSource= BinaryToString(inetread("http://www.hunde.de"))
    $ersetze = StringReplace($sSource,"DOCTYPE","Ilse-Test")
    Msgbox(0,"",$sSource)

    [/autoit]

    Könnt Ihr mir hier helfen, wie ich das mit einem BinaryToString machen kann?


    Liebe Grüße
    Ilse ;)

  • Öhm also mal ehrlich... du veränderst einen String und speicherst diesen in einer neuen Variable, lässt dir in der msgbox aber den unveränderten original String anzeigen. Was erwartest du da dann bitte zusehen?
    Lass dir die Variable $ersetze anzeigen, dann siehste auch was dein Script gemacht oder auch nicht gemacht hat.

  • Oder aber verwende das ganze so:

    [autoit]

    $sSource= BinaryToString(inetread("http://www.hunde.de"))
    $sSource = StringReplace($sSource,"DOCTYPE","Ilse-Test") ;nur so wird der Inhalt von $sSource auch verändert bzw. neu geschrieben
    Msgbox(0,"",$sSource)

    [/autoit]
    UNPLEASANT SPOILER

    You just lost the game!