besonderen string suchen und ersetzen

  • huhu ^^
    also ich bin noch ziemlich neu und deswegen hab ich natürlich sogut wie keinen plan xD naja was ich vor hab.. ich will mit autoit so um die 4000 dateien verändern.. da jedes normale tool das ich aus google hab versagt hat muss ichs halt selbst in die hand nehmen..

    zuerst hab ichs damit versucht.. was auch ziemlich gut ging find ich.. problem ist nur bei 4000 dateien dauert das 5 stunden xD

    Spoiler anzeigen
    [autoit]

    WinActivate("test.pal - Editor", "") ;wechselt zur .pal datei die schon mit dem editor geöffnet wurde
    Send("^a")
    sleep(50)
    Send("^c")
    sleep(50);und kopiert die ganze kacke da drin

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

    $i = 0
    While $i <= 4000
    WinActivate("fertig", "");aktiviert den ordner "fertig"
    sleep(5)
    send("{SPACE}")
    Sleep(5)
    send("{ENTER}") ;öffnet die markierte datei und wartet bis der editor kommt..
    WinWaitActive("[CLASS:Notepad]", "")
    Sleep(5)

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

    Send("^f") ;suche aktivieren
    Sleep(5)
    Send("^v") ;string mit strg+v einfügen und auf enter..
    send("{ENTER}")
    Sleep(5)

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

    send("!{F4}") ;suchen fenster schliesen

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

    Sleep(5)
    send("÷êºä Ì“Å »€³ ªn¢ ˜\‘ ‡J€ v7n e%]") ;dann wird automatisch das von suche markierte mit dem string hier überschrieben
    Sleep(5)
    Send("^s") ;speichern nicht vergessen

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

    send("!{F4}") ;fenster schliesen
    send("{DOWN}") ;pfeiltaste runter um die nächste datei auszuwählen.. und das ganze von vorn

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

    $i = $i + 1

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

    WEnd
    Exit

    [/autoit]

    also die variante oben ist so als wenn man alles per hand öffnet uns speichert.. dauert deswegen ewig..

    dann hab ich bischen rumgesucht.. und bin auf _ReplaceStringInFile gestoßen..
    naja gut.. ich mach ein test.txt file mit nem kleinen text drin und ersetz es dann mit nem andern.. hat alles super geklappt :D

    jetzt versuch ich das mit meiner .pal datei und knapp 95% des inhaltes wird gelöscht X( aber wieso? o.o

    hier mal der code..

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    $find = "ÿÿÿ"
    $replace = "abc"

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

    $filename = "C:\Kopie von palette_001.pal"

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


    $retval = _ReplaceStringInFile($filename,$find,$replace)
    if $retval = -1 then
    msgbox(0, "ERROR", "The pattern could not be replaced in file: " & $filename & " Error: " & @error)
    exit

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

    endif

    [/autoit]

    ausgangsdatei sah so aus:

    Spoiler anzeigen

    ÈøÓ ÿÿÿ ÿô¼ ÿᶠèÇ¥ Ñ°” º™ƒ £q –of ‚SS ííÿ ÎÌà ¯§Á •‹§ zoŒ d^w GCY )'; ÿÞÄ ú»« ô˜’ é~z Ëbf ²FQ Œ5> u(0 ÿÿÀ Þæ« ÀÖ– ›µ~ ~”f _tQ @T; )7% ÿûÈ ýã² ûËœ î³… Ú—s Åz` «iW ‘QN ÿðå ìÊÆ Ø¦¢ ÈŽŒ ¸t| ž\f ~AQ \%; ÿå£ ûÅ‹ ÷¥r ò…Y ídG ¾C0 " a ÿÞÄ ú»« ô˜’ é~z Ëbf ²FQ Œ5> u(0 ÿóë îß× ÜËà ʷ¯ ¸£› ©‹ ™{{ ‰gk ÷ðå ÿáÏ ÿƲ ö®Ÿ Ü„ ½sk žVR ‚?; Ö𵠸إ š¿” €£‡ f†t Lhd 1JT +C n%- ÿåµ óÈž 檆 ÓŒn ³rY ž^I zA2 U% ÿÞ¿ ëĨ ת‘ Ãz ®vb Ž^K nF4 N. ðÑÜ Ö¸Ç ½Ÿ° £‡™ ˆo‚ nWj S?S 8'; ÿÿË ÿÞ¬ ÿÀŒ ë¡q Ï…\ ²iG N9 g4) ÿÿÞ çæÈ Ï̲ ·²œ Ÿ˜… „}q ib] MFH ÿ ÿ ÿÿÿ

    und danach blieb nurnoch das hier: ÈøÓ

    naja.. später will ich das jede datei in einem ordner mit der endung .pal nach dem string "÷ðå ÿáÏ ÿƲ ö®Ÿ Ü„ ½sk žVR ‚?;" durchsucht wird und durch den hier "êºä Ì“Å »€³ ªn¢ ˜\‘ ‡J€ v7n e%]" ersetzt wird ^^

    hoffe hier kann mir wer helfen =)

  • ok.. also ich habs jetzt geschaft das in der datei "Line1" steht ohne das sich der rest der datei geändert hat.. problem ist jetzt aber Stringreplace o.o

    [autoit]

    $text = StringReplace("÷ðå ÿáÏ ÿƲ ö®Ÿ Ü„ ½sk žVR ‚?;", "÷ðå ÿáÏ ÿƲ ö®Ÿ Ü„ ½sk žVR ‚?;", "êºä Ì“Å »€³ ªn¢ ˜\‘ ‡J€ v7n e%]")
    MsgBox(0, "New string is", $text)

    [/autoit]


    wenn ich das so dastehn hab dann zeigt er mir den neuen string an aber.. wie bekomm ich jetzt $text an die stelle wo vorher "÷ðå ÿáÏ ÿƲ ö®Ÿ Ü„ ½sk žVR ‚?;" stand?

  • Ich blick hier zwar nicht ganz sooo durch aber pee hat das ganz glaub ich so gedacht:

    [autoit]


    $find = "ÿÿÿ" ;Danach wird gesucht
    $replace = "abc" ;und damit ersetzt
    $filename = "C:\Kopie von palette_001.pal" ;Der Pfad und der Name der Datei
    $ersetzt = StringReplace(FileRead($filename), $find, $replace) ;Datei wird gelesen und der gesuchte String ersetzt
    FileDelete($filename) ;Alte Datei wird geleert bzw. gelöscht
    FileWrite($filename, $ersetzt) ;Neue Datei wird geschrieben

    [/autoit]

    Versuchs mal mach aber vorher ein Backup der ursprungsdatei (nur zur sicherheit ;))

  • hat den selben effekt wie mein script weiter oben.. da kommt wieder nur ne datei mit "ÈøÓ" raus q.q

    als ich aber mal
    "ÿÿÿ" mit "abc" ersetzt hab ging es..

    liegt es vielleicht an den zeichen?

    • Offizieller Beitrag

    Hallo

    Probier mal Binär zu arbeiten:

    Spoiler anzeigen
    [autoit]

    $find = "÷ðå ÿáÏ ÿƲ ö®Ÿ Ü„ ½sk žVR ‚?;" ;Danach wird gesucht
    $replace = "êºä Ì“Å »€³ ªn¢ ˜\‘ ‡J€ v7n e%]" ;und damit ersetzt
    $filename = "C:\Kopie von palette_001.pal" ;Der Pfad und der Name der Datei
    $filenamewriteto = "C:\autoittest_palette_001.pal" ;Der Pfad und der Name der Datei

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

    $op = FileOpen($filename,16)
    $ersetzt = Binary(stringreplace(BinaryToString(FileRead($op)), $find, $replace))
    FileClose($op)
    $op = FileOpen($filenamewriteto,16 + 2)
    FileWrite($op, $ersetzt) ;Neue Datei wird geschrieben

    [/autoit]

    Falls das nicht klappt sag uns doch bitte mal wie die Datei Formatiert ist ( UTF 8, Unicode (UTF 16) (little oder big) oder ansi)

    Mfg Spider

  • ne das funzt auch nicht.. stellt nur noch ne datei her die genauso wie die alte ist..
    und wie die dateien formatiert sind das weiß ich leider auch nicht o.o
    aber vielleicht helfen euch ein paar test datein ^^
    http://www.uploadarea.de/files/8fths7ddow1cp9xiw58qlhgpf.rar

    danke schonmal das ihr euch so mühen macht =)

    E: bei denen muss man nach ÷ðå Þæ« ÀÖ– š~ •g ]rQ @T; )8% suchen
    und z.b. mit ÷ðå ÿáÏ ÿƲ ö®Ÿ Ü„ ½sk žVR ‚?; ersetzen ^^