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

Hallo Ihr,

 

ich habe schon mit hilfe von Gero folgendes gebastelt.

Gui, Add, Text, Center, Suchwort
Gui, Add, Edit, center vSuchWort,
Gui, Add, Text, Center, Ersatzwort
Gui, Add, Edit, center vErsatzWort,
Gui, Add, Button, center gErsetzen, Ersetzen
Gui, Add, Button, center gLöschen, Zeile Löschen
Gui, show, center, h150 w150, Suchen und Ändern
return

guiclose:
Exitapp

Ersetzen:
gui, submit, nohide
FileSelectFile, Ausgabedatei, , %A_WorkingDir%,
FileRead, Var, %Ausgabedatei%
IfInstring, Var, %SuchWort%
{
	StringCaseSense, On
	StringReplace, Var, Var, %Suchwort%, %Ersatzwort%
	FileDelete, Test1.txt 
	FileAppend, %Var%`n,%Ausgabedatei%
	run, %Ausgabedatei%
	return
}
else
MsgBox, %Suchwort% nicht im Text
return

Löschen:
gui, submit, nohide

Loop,read,%Ausgabedatei%
{
IfInString,A_LoopReadLine,%Suchwort%
    {
    FileAppend,%Ersatzwort%,Test.txt
    continue
    }
FileAppend,%A_LoopReadLine%`n,Test.txt
}
FileRead, Var, Test.txt
FileDelete, %Ausgabedatei%
FileDelete, Test.txt
FileAppend, %Var%`n,%Ausgabedatei%

run,%Ausgabedatei%

jetzt ist aber das Problem, das er wenn ich als Beispiel eingebe:

 

Suchwort: Tag

Ersatzwort: Nacht

 

Ersetzt werden folgende Wörter:

 

Tag -> Nacht

Tageslicht -> Nachteslicht

Taghell -> Nachthell

usw.

 

es werden allso alle Wörter mit TAG mit NACHT ersetzt. Ich möchte aber nur das sie "Tag als einzelwort ersetzen. Ist das möglich?

 

 

danke schonmal an die commu

 

 

 

 

 

 



SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

Hast du es schonmal mit RegExReplace probiert?

Var := RegExReplace(Var, "\b\Q" Suchwort "\E\b", Ersatzwort,, 1)

(Anscheinend willst du ja nicht alle Vorkommen, sondern nur eins ersetzen.



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

Wurde grad mein post gefressen? :O


Visit the new forum ahkscript.org.

http://ahkscript.org


garry
  • Spam Officer
  • 3219 posts
  • Last active: Sep 20 2018 02:47 PM
  • Joined: 19 Apr 2005

danke SAPlayer für regex example

habe es mit space versucht ( space ans Wortende anhängen)

/*
Tag -> Nacht
Tageslicht -> Nachteslicht
Taghell -> Nachthell
*/


StringCaseSense, On
transform,s,chr,32
autotrim,off
f1=%a_scriptdir%\test1.txt


;--- for Test -------------------------
ifexist,%f1%
  filedelete,%f1%
e4x=
(Ltrim Join%s%`r`n   ;- add space und `r`n
Tag
Tageslicht
Taghell

)
ifnotexist,%f1%
   Fileappend,%e4x%,%f1%
;------ end test -----------------------

Gui,2: Add, Text  , x10  y10                  , Suchwort
Gui,2: Add, Edit  , x100 y10 w150 vSuchWort   , Tag
Gui,2: Add, Text  , x10  y40                  , Ersatzwort
Gui,2: Add, Edit  , x100 y40 w150 vErsatzWort , Nacht
Gui,2: Add, Button, x10  y70 gErsetzen        , Ersetzen
Gui,2: show, x200 y10 h150 w270, Suchen und Ändern
return

2Guiclose:
Exitapp

Ersetzen:
Gui,2: submit, nohide
suchwort  =%suchwort%%s%
ersatzwort=%ersatzwort%%s%
;FileSelectFile,Filex, , %A_WorkingDir%,
;f1=%filex%
FileRead, Var, %f1%
IfInstring, Var, %SuchWort%
{
    StringReplace, Var, Var, %Suchwort%, %Ersatzwort%,,all
    FileDelete,%f1%
    FileAppend, %Var%`r`n,%f1%
    run, %f1%
    return
}

else
    MsgBox, "%Suchwort%" nicht im Text
return
;=================================================================




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

würde

Var := RegExReplace(Var, "\b\Q" Suchwort "\E\b", Ersatzwort, Limit = -1, 1)

auch mit allen wörtern ersetzen funktionieren? Würde das gerne Variable machen wollen, alle oder nur eins.

 

 

dann verstehe ich folgende verwendung nicht, hab sie auch nirgens gefunden.

 

"\b\Q" Suchwort "\E\b"



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
Var := RegExReplace(Var, "\b" Suchwort, Ersatzwort,, (searchforall?-1:1))

Das ist der richtige Befehl.


Visit the new forum ahkscript.org.

http://ahkscript.org


SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

Mal die Erklärungen dazu aus der Hilfe:

\b: \b bedeutet "Wortgrenze", das sich wie ein Anker verhält, weil es keine Zeichen konsumiert. Der Status des aktuellen Zeichens muss ein Wort-Zeichen (\w) sein, um das Gegenteil des vorherigen Zeichens zu sein. Es wird normalerweise verwendet, um eine versehentliche Übereinstimmung mit einem Wort zu vermeiden, das sich in einem anderen Wort befindet. Zum Beispiel stimmt \bcat\b nicht mit catfish überein, aber es stimmt mit cat überein, egal ob es von Interpunktionen oder unsichtbare Zeichen umgeben ist. Großgeschriebenes \B bewirkt das Gegenteil: das aktuelle Zeichen darf sich nicht an einer Wortgrenze befinden.

 

\Q + \E: Die meisten Zeichen wie abc123 können direkt in einem regulären Ausdruck verwendet werden. Allerdings müssen die Zeichen \.*?+[{|()^$ mit einem Backslash vorangestellt werden, damit sie direkt verwendet werden. Zum Beispiel ist \. ein direkt vorhandener Punkt und \\ ist ein direkt vorhandener Backslash. Das Schützen kann mit \Q...\E verhindert werden. Zum Beispiel: \QDirekt vorhandener Text\E.



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

Bei \Q\E geb ich dir Recht.

Er will aber auch cat aus catfish ja auch ersetzen lassen.


Visit the new forum ahkscript.org.

http://ahkscript.org


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

@SAP

 

komplieziert^^ das muss ich mir mehrmals durchlesen

 

 

@ NNNIK

 

nope, genau das soll er eben nicht, wenn das wort wie in deinem Beispiel Catfish ist, und das Suchwort aber "Cat" ist soll er "Catfish" nicht ersetzen sondern nur das einzeln stehende Wort Cat

 

Als Beispiel.

 

Suchwort Cat:

Ersatzwort Dog

 

The Cat is Great.

The Catfish not.

 

Danach:

 

The Dog is Great

The Catfish not.



garry
  • Spam Officer
  • 3219 posts
  • Last active: Sep 20 2018 02:47 PM
  • Joined: 19 Apr 2005

Beispiel, wird ein  space an Wortende angehängt

/*
Cat > ersatz Dog
The Cat is Great.   ;- nur hier ändern
The Catfish not.
*/


StringCaseSense, On
transform,s,chr,32
autotrim,off
f1=%a_scriptdir%\test1.txt

;--- for Test -------------------------
ifexist,%f1%
  filedelete,%f1%
e4x=
(Ltrim Join%s%`r`n   ;- add space und `r`n
The Cat is Great.
The Catfish not.

)
ifnotexist,%f1%
   Fileappend,%e4x%,%f1%
;------ end test -----------------------

Gui,2: Add, Text  , x10  y10                  , Suchwort
Gui,2: Add, Edit  , x100 y10 w150 vSuchWort   , Cat
Gui,2: Add, Text  , x10  y40                  , Ersatzwort
Gui,2: Add, Edit  , x100 y40 w150 vErsatzWort , Dog
Gui,2: Add, Button, x10  y70 gErsetzen        , Ersetzen
Gui,2: show, x200 y10 h150 w270, Suchen und Ändern
return

2Guiclose:
Exitapp

Ersetzen:
Gui,2: submit, nohide
suchwort  =%suchwort%%s%
ersatzwort=%ersatzwort%%s%
;FileSelectFile,Filex, , %A_WorkingDir%,
;f1=%filex%
FileRead, Var, %f1%
IfInstring, Var, %SuchWort%
{
	StringReplace, Var, Var, %Suchwort%, %Ersatzwort%,,all
	FileDelete,%f1%
	FileAppend, %Var%`r`n,%f1%
	run, %f1%
	return
}

else
    MsgBox, "%Suchwort%" nicht im Text
return
;=================================================================



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

0.0 dann stell deine Frage richtig:

Tag -> Nacht

Tageslicht -> Nachteslicht

Taghell -> Nachthell


Visit the new forum ahkscript.org.

http://ahkscript.org


SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

0.0 dann lern lesen:

es werden allso alle Wörter mit TAG mit NACHT ersetzt. Ich möchte aber nur das sie "Tag als einzelwort ersetzen. Ist das möglich?



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

@NNNIK und SAP

wink.pngtongue.png grin.png

 

 

 

@garry

ein space... -.- war ja klar das das wieder so einfach ist..

ich probier mal deins aus und bastel das mir um dann poste ich das nochmal, danke erstmal



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

Heyho,

bin jetzt schon etwas weiter, wollte jetzt noch eine Funktion hinzufügen wo man auswählen kann ob man einzeln(durchloopen der einzelnen Zeilen und dann entscheidet ob man das Wort ersetzen möchte) oder was ja schon Funktioniert alle Wörter Die 100% übereinstimmen ersetzt.

StringCaseSense, On
transform,s,chr,32
autotrim,off


Gui, Add, Text, Center								, Suchwort
Gui, Add, Edit, w100 center vSuchWort				, Cat
Gui, Add, Text, Center								, Ersatzwort
Gui, Add, Checkbox, center vChecked					, Alle/Einzeln Ersetzen
Gui, Add, Edit, w100 center vErsatzWort 			, Dog
Gui, Add, Button, center gErsetzen					, Ersetzen
Gui, Add, Button, center gLöschen					, Zeile Löschen
Gui, show, center, h150 w150						, Suchen und Ändern
return

guiclose:
Exitapp

Ersetzen:
gui, submit, nohide
suchwort  =%suchwort%%s%
ersatzwort=%ersatzwort%%s%
FileSelectFile, Ausgabedatei, , %A_WorkingDir%,

if (Checked=1)
{
	goto AlleErsetzen
}

else
{
	AlleWörter=
	goto EinzelnErsetzen
}

AlleErsetzen:

FileRead, Var, %Ausgabedatei%
IfInstring, Var, %SuchWort%
{
	StringReplace, Var, Var, %Suchwort%, %Ersatzwort%,, all
	FileDelete, %Ausgabedatei% 
	FileAppend, %Var%`r`n,%Ausgabedatei%
	run, %Ausgabedatei%
	return
}
else
MsgBox, %Suchwort% nicht im Text
return

;################################################ um diesen Part geht es#####################

EinzelnErsetzen:
gui, submit, nohide
Loop,read,%Ausgabedatei%
{
IfInString,A_LoopReadLine,%Suchwort%
    {
    MsgBox, 35, Suchen, Gefundenes Wort Ersetzen?`n %A_LoopReadLine%
	IfMsgBox Yes
		{
		FileAppend,%Ersatzwort%,Test.txt
		 ;StringReplace, Var, A_LoopReadLine, %Suchwort%, %Ersatzwort%
		break
		}
	else IfMsgBox No
		{
		continue
		}
	else
		{
		break
		}
    }
FileAppend,%A_LoopReadLine%`n,Test.txt
}
FileRead, Var, Test.txt
FileDelete, %Ausgabedatei%
FileDelete, Test.txt
FileAppend, %Var%`n,%Ausgabedatei%

run,%Ausgabedatei%
return

;######################################################################################################



Löschen:
gui, submit, nohide
FileSelectFile, Ausgabedatei, , %A_WorkingDir%,
Loop,read,%Ausgabedatei%
{
IfInString,A_LoopReadLine,%Suchwort%
    {
    FileAppend,%Ersatzwort%,Test.txt
    continue
    }
FileAppend,%A_LoopReadLine%`n,Test.txt
}
FileRead, Var, Test.txt
FileDelete, %Ausgabedatei%
FileDelete, Test.txt
FileAppend, %Var%`n,%Ausgabedatei%

run,%Ausgabedatei%

Momentan, loopt er alles Ordentlich durch zeigt es mir auch an, aber dann löscht er komplett alles und schreibt nur den Ersatztext hin, bzw löscht die zeilen wo Das suchwort enthalten ist. habe schon verschiedene Sachen Probiert, komme aber auf keinen nenner. habt ihr noch eine Idee?

 

PS: danke an Garry, hat so bis jetzt gut funktioniert :)



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

0.0 dann lern lesen:

 

FAIL :D


Visit the new forum ahkscript.org.

http://ahkscript.org