Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Besserer Wortfilter bei StringReplace


  • Please log in to reply
28 replies to this topic
D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

keiner ne idee?



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Geduld... wink.png
 
Hier, so gehts:

Spoiler

 

Das Hauptproblem bei deinem Script war eigentlich die falsche Verwendung vom "break" befehl, denn der springt einfach aus dem loop und somit werden die restlichen zeilen einfach ignoriert. Somit hat der break Befehl bei dir im Script gar nichts zu suchen.
Damit geht logischerweise auch einher, dass man die Abbrechen-Funktion umstricken muss, denn Abbrechen soll ja nicht einfach den Rest der Datei ignorieren sondern lediglich alle folgenden gefundenen Suchwörter überspringen. Deshalb habe ich eine extra Variable cancel_flag mit eingebaut.
Sobal diese auf 1 gesetzt ist, "rast" er einfach durch den rest des loops durch und übernimmt alle Zeilen unverändert.

 

Du solltest dir allerdings im Klaren darüber sein, dass du hier ein Konzept mit zeilenweiser Verarbeitung aufgebaut hast, dass heißt wenn in einer Zeile das Suchwort 2 mal vorkommt, werden auch beide ersetzt. Innerhalb einer Zeile kann man sich nicht entscheiden...

Wenn du wirklich für jedes einzelne gefunden Wort eine Entscheidungsmöglichkeit einbauen möchtest, müsste man ganz anders an die Sache rangehen...


Find the recent autohotkey version here: ahkscript.org


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Erstmal danke, ich werd mich erstmal ohne spoiler ranmachen ;)

 

1. Ja das weiß ich, eigentlich war es erst so geplant, dass er nur die zeile mit dem wort(in meinem script das ich brauche "stichwort") sucht und löscht.

dann dachte ich mir aber, das das ja für andere sachen auch zu gebrauchen wäre, zb. um in einem ahk script alle Variablennamen ersetzen usw. oder in einem Textdokument.

drum würde ich das hier dann nach einer verfeinerung auch komplett ins Forum stellen wollen.

 

2.

 

Wenn du wirklich für jedes einzelne gefunden Wort eine Entscheidungsmöglichkeit einbauen möchtest, müsste man ganz anders an die Sache rangehen...

 

achja? gib mal ein Tipp ;)



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Loop, Parse heißt das Zauberwort. wink.png

 

Wenn du dort als Trennzeichen einfach ein Space benutzt, hättest du deine "wort-weise" Verarbeitung. Du müsstest dann lediglich prüfen ob (A_LoopField = Suchwort), denn A_LoopField würde in diesem Fall nacheinander, jedes einzelne Wort des zu durchsuchenden Textes als Wert zugewiesen bekommen.


Find the recent autohotkey version here: ahkscript.org


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Sesam öffne dich :D

 

ich probiers mal die Tage :)



D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Hm,

also habs jetzt so probiert einmal mit deinem und einmal mit meinem, aber irgendwie überschreibt er nix...

EinzelnErsetzen:
gui, submit, nohide
Loop,read,%Ausgabedatei%
{
	If InStr(A_LoopReadLine, %Suchwort%) and !cancel_flag
    {
		MsgBox, 35, Suchen, Gefundenes Wort Ersetzen?`n %A_LoopReadLine%
		IfMsgBox Yes
				{
				StringReplace, Var, Var, %Suchwort%, %Ersatzwort%
				;FileAppend,%Ersatzwort%,Test.txt
				}
		else IfMsgBox No
				{
				continue
				}
		else
				{
				cancel_flag := 1
				continue
				}
    }
	else
		FileAppend,%A_LoopReadLine%`n,Test.txt
}
FileRead, Var, Test.txt
FileDelete, %Ausgabedatei%
FileDelete, Test.txt
FileAppend, %Var%`n,%Ausgabedatei%

run,%Ausgabedatei%
return



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

 

Hm,

also habs jetzt so probiert einmal mit deinem und einmal mit meinem, aber irgendwie überschreibt er nix...

 

Überschreibt er bei beiden nichts, oder nur bei deinem? Ich hatte meins eigentlich getestet und das hat eigentlich so funktioniert...

Bei deinem wird jedenfalls nichts überschrieben, weil du den FileAppend-Befehl escaped hast. wink.png


Find the recent autohotkey version here: ahkscript.org


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Also nachdem ich meins Angepasst hatte, (ja das escape war nur probeweise drausen) hatte ich das Probiert und es ging nicht.

dann habe ich Komplett deins Probiert aber auch das ging nicht. oder hast du auser in dem Segment was verändert? Außer die Var?

 

 

edit:

 

also ich hab gerade nochmal komplett das probiert was du gepostet hast und es überschreibt nix :(

weiß jetzt aber auf anhieb nicht was da falsch ist. vieleicht wird die VAr nicht richtig erkannt



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Also ich habe mein Script gerade noch mal getestet und es hat funktioniert...
Wenn du es genau so übernommen hast dürfte es theoretisch keine Probleme geben.
Keine Ahnung, woran es liegen könnte, das einzige was mir aufgefallen ist, ist dass er in einer gefundenen Zeile immer nur das erste Wort und nicht alle ersetzt.
Das kann man über den letzten parameter des StringReplace Befehls einstellen:

StringReplace, ErsetzteZeile, A_LoopReadLine, %Suchwort%, %Ersatzwort%, all

Somit würde das Script jetzt insgesamt so aussehen:

Spoiler

 

Vielleicht liegt es an der AHK Version, welche benutzt du?

Außerdem wie sieht eigentlich die Datei aus, an der du das Script testest? Daran könnte es vlt auch liegen.


Find the recent autohotkey version here: ahkscript.org


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Ok, ich versuchs mal so zu erklären.

das script "funktioniert" soweit.

 

aber versuche mal das Script mit mit folgender Text datei anzuwenden also mit FileSelect, dann weist du was ich meine.

 

test.txt :

 

Cat

dog

Cat 123

dog 123

 

 

nachdem das Script seine arbeit gemacht hat, sind alles Cats weg und dafür 1 Dog mehr enthalten.

 

 

edit:

kann der fehler vielleicht auch an einer "veralteten" AHK version liegen?



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Ok, ich bin mir ziemlich sicher, dass das Herangehen mit zeilenweiser Verarbeitung falsch war. Dadur werden nämlich die Zeilenumbrüche in deinem Testfile einfach gefressen, falls das Wort alleine in der Zeile steht.

Du musst anscheinend wirklich auf Loop, parse zurückgreifen. Dann musst du allerdings bedenken, dass zwischen den Wörtern eben nicht nicht nur Leerzeichen stehen, sondern zum Beispiel auch mal Zeilenumbrüche. Auch diese musst du gesondert behandeln.


Find the recent autohotkey version here: ahkscript.org


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

hm, wir wohl anders nicht gehen, da schau ich mal was ich gebastelt bekommen, vielen dank erstmal, ich denke ich werd wenn ich was hab das wieder hier Posten :)



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Wieso zum Teufel seid ihr zu StringReplace zurückgegangen?


Visit the new forum ahkscript.org.

http://ahkscript.org


Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012
RegEx war D_Fox zu kompliziert und da es ja sowieso darum geht, jedes gefundene Wort einzeln zu behandeln, ist die Methode mit der dieses einzelne Wort nun ersetzt wird sowieso egal.

Find the recent autohotkey version here: ahkscript.org