Hallo
wie krige ich hin aus nem Text z.b. "hallo" rauszusuchen und den zu verändern ?
Jetz kommt bestimmt StringInStr
Ok das geht ja aber was wen ich das zweite oder dritte "hallo" im Text suche.
Was dann?
Bestimten Text suchen und verändern
-
- [ offen ]
-
Freaky -
21. Dezember 2009 um 18:00 -
Geschlossen -
Erledigt
-
-
StringInStr mit dem Parameter "Start". Damit kannst du dann erst hinter dem 1. oder 2. "hallo" anfangen zu suchen...
-
Hi,
Vielleicht kann dir ja auch die Funktion StringReplace oder StringRegExpReplace helfen.MfG
Der_Doc -
Ok danke.
Aber was ist wen ich den Text aus einer 5 MB grossen Datei suche?
Wie krige ich dann den anderen string dareingeschrieben bzw. Wie krige ich an der stelle wo "hallo" standt z.b. "12345" hin? -
Bitteschön.
Spoiler anzeigen
[autoit]$hGUI = GUICreate("")
[/autoit] [autoit][/autoit] [autoit]
$edit = GUICtrlCreateEdit("Ich bin ein Text, in dem Hallo vorkommt."&@CRLF&"Hallo ist nämlich ein gängiges Wort in der deutschen Sprache."&@CRLF&"Ohne Hallo könnte sich niemand begrüßen. Hallo allesamt",20,20,300,300)
$button = GUICtrlCreateButton("suchen",20,350)
GUISetState()While True
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case -3
Exit
Case $button
GUICtrlSetData($edit,_StringReplace(GUICtrlRead($edit),"Hallo","huhuuu",2))
EndSwitch
WEndFunc _StringReplace($sString,$sSubString,$sReplaceString,$iOccurence=1,$iCaseSense=0)
[/autoit]
;SEuBo
Return StringLeft($sString,StringInStr($sString,$sSubString,$iCaseSense,$iOccurence)-1)&StringReplace(StringTrimLeft(StringTrimRight($sString,StringLen($sString)-StringInStr($sString,$sSubString,$iCaseSense,$iOccurence)-StringLen($sSubString)),StringInStr($sString,$sSubString,$iCaseSense,$iOccurence)-1),$sSubString,$sReplaceString)&StringRight($sString,StringLen($sString)-StringInStr($sString,$sSubString,$iCaseSense,$iOccurence)-StringLen($sSubString))
EndFunc -
Also wenn es eine Text-Datei ist, dann das File über FileRead einlesen und mit Replace ersetzen und dann wieder.
Die Datei schreiben. FrileWrite.MfG
Der_Doc -
Danke.
Aber jetz zur Datei.
Mir wurde gesagt ich muss es in Binary lesen+schreiben.
Aber wen es in Binary steht dann kann den Text garnicht mehr suchen.
Wie krige ich es anders hin Filewrite mit Sonderzeichen zu bnutzen. -
Also FileWrite schreibt Umlaute und auch sonderzeichen.
Hier einfach mal ein Beispiel aus der Hilfe
Spoiler anzeigen
[autoit]$file = FileOpen("test.txt", 1)
[/autoit] [autoit][/autoit] [autoit]; Check if file opened for writing OK
[/autoit] [autoit][/autoit] [autoit]
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIfFileWrite($file, "Zäöh _ §E")
[/autoit] [autoit][/autoit] [autoit]
FileWrite($file, "Still Line1" & @CRLF)
FileWrite($file, "Line2")FileClose($file)
[/autoit]MfG
Der_Doc -
Hier ist das was ich meine:
Die Helfte der zeichen kann ich hier z.b. nicht mehr sehen.
[Blockierte Grafik: http://s2.imgimg.de/uploads/sonderzeichend076eefdPNG.png]
der text oben ist wie hier im bild die erste zeile -
Was ist denn das für ein Format?
Sieht mir aus wie Maschinen Code
Peinlich aber ich komme nicht auf den Namen des Formates.MfG
Der_Doc -
Ich habe da keine Ahnung
Ist aber doch egal oder nicht? -
Das sind einfach nur Steuerzeichen, die die Befehle dazu veranlassen abzubrechen.
So z.B. die Anzeige in einer MsgBox usw...
Deshalb kann man den String auch nicht mit StringRegExp bearbeiten.Um solche Daten schreiben zu können musst du eine Datei mit FileOpen im BinaryMode öffnen, deinen zuschreibenden Text in Binary umwandeln und in die Datei schreiben.
Für ein Beispiel habe ich keine Zeit jetzt, außerdem wäre es vll. mal Sinnvoll Teile des Strings hier zu posten, sonst nutzt das denjenigen die dir helfen sollen wenig. -
Weil das Ganze sieht aus wie ein kompiliertes Programm.
Das ganze könnte dann ANSI sein. Aber sicher bin ich mir auch net.
Aber es gibt Leute die das kennen.MfG
Der_Doc -
Ja das ist ein compiltes Programm
-
Dann wird das sowie so nix. Und dekompilieren ist nicht erwünscht
Sorry. Wenn es nur eine TextDatei wäre, dann wäre es kein Problem.MfG
Der_Doc -
Ich weiß das decompilen unerwünscht wär aber ich will es ja an der exe verändern.
Und an einer Text datei wär es auch leicht.
Deswegen habe ich auch ein problem und frage euch
Ich habe irgent wo in der Sig gelsen: Nichts ist mit AutoIt unmöglich
Dann beweißt es mal -
Der_Doc, es kann ja auch ein Programm sein, dass nicht in AutoIt geschrieben wurde. Und dort könnte man auch Texte austauschen...
Ich finde ihr solltet einfach mal auf jemanden warten, der weis wie es geht, weil mittlerweile wird das nur ein zugespamme.anno2008
-
Hi anno2008
ich glaube mal das wir von spammen weit entfernt sind.
Das Programm ist nicht in AutoIt geschrieben aber das tut auch nichts zur Sache.MfG
Der_Doc -
- Offizieller Beitrag
Man kann aber auch bei Binärdateien nach "Strings" suchen und ersetzen.
Der Austauschstring muss aber die gleiche Länge haben (nicht kürzer und nicht länger).Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$sPath = @ScriptDir & '\test.exe'$sSearchString = 'This program cannot be run in DOS mode'
[/autoit] [autoit][/autoit] [autoit]
$sReplaceString = 'Das Programm läuft nicht im DOS-Modus 'If StringLen($sSearchString) <> StringLen($sReplaceString) Then Exit MsgBox(0, 'Fehler', 'Die beiden Strings müssen die gleiche Länge haben!')
[/autoit] [autoit][/autoit] [autoit]
$hFile = FileOpen($sPath, 16)
If $hFile = -1 Then Exit MsgBox(0, 'Fehler', 'Konnte Datei nicht öffnen')
$sFile = FileRead($hFile)
FileClose($hFile)$iFound = StringInStr($sFile, StringMid(StringToBinary($sSearchString), 3))
[/autoit] [autoit][/autoit] [autoit]
If $iFound = 0 Then Exit
$sFile = StringReplace($sFile, $iFound, StringMid(StringToBinary($sReplaceString), 3))$hFile = FileOpen($sPath, 2 + 16)
[/autoit]
If $hFile = -1 Then Exit MsgBox(0, 'Fehler', 'Konnte Datei nicht öffnen')
FileWrite($hFile, $sFile)
FileClose($hFile) -
So,
[autoit]
du ich hatte jetzt kurz Zeit mich damit zu beschäftigen.
Du musst wie gesagt schon im Binary-Mode lesen.$oFile = FileOpen("deineexe.exe", 16)
[/autoit][autoit][/autoit][autoit]
$read = FileRead($oFile)$read = BinaryToString($read) ;<-- jetzt kannst du $read bearbeiten
[/autoit][autoit][/autoit][autoit]
;....$oFile2 = FileOpen("deineexenahher.exe", 18)
[/autoit]
FileWrite($oFile2, StringToBinary($read))Der_Doc, man muss zwar etwas misstrauisch sein, aber man kann nicht immer direkt behaupten, dass alles was man machen will ein Bot oder sonst was illegales is.
Wenn er das will bekommt er das eh hin und ansonsten seh ich keinen Sinn, warum man eine Exe bearbeiten sollte. Wenn man z.B. einen Updater baut und seine Exe Patchen will muss man auch genau das machen./Edit:
Oscar hat die ausführliche Lösung -