String am Wortende finden und ersetzen

Anwenderaustausch zur PhraseExpress Makroprogrammierung
Forum rules
Bitte beachten Sie die Hinweise zum Forum. Vielen Dank!
Post Reply
rso
Posts: 22
Joined: 04 Jun 15, 14:36

String am Wortende finden und ersetzen

Post by rso » 01 Dec 17, 10:38

Hallo, ich will einen bestimmten String im ganzen Text finden und ersetzen. Die Bedingung ist, dass der String jeweils nur am Wortende ersetzt werden muss, anderswo muss er erhalten bleiben.
Meine Lösungsansätze waren Stringoperationen oder idealerweise Regex, allerdings ist mir nur folgende "manuelle" Lösung eingefallen:

Code: Select all

{#settemp -name cb -content {#replace {#gettemp cb} -oldtext yy{#asc 32} -newtext y{#asc 32}}}{#settemp -name cb -content {#replace {#gettemp cb} -oldtext yy{#asc 10} -newtext y{#asc 10}}}{#settemp -name cb -content {#replace {#gettemp cb} -oldtext yy{#asc 13} -newtext y{#asc 13}}} usw.
Als Definition des Wortendes würde man noch weitere Zeichen berücksichtigen ("'>}]).,?!/\:;-_) – also um die 20 Regeln …
Weil ich verschiedene weitere Strings ersetzen will, suche ich nach einer effizienteren Lösung mit weniger Code. Danke vorab.

Peter Stotz
PhraseExpress Expert
Posts: 611
Joined: 27 Feb 08, 15:07

Re: String am Wortende finden und ersetzen

Post by Peter Stotz » 01 Dec 17, 16:54

Eine regex in einem Texteditor bietet sich hier schon sehr an, aber prinzipiell funktioniert ihr Lösungsansatz auch mit PhraseExpress ganz gut.
Um den Code zu vereinfachen, können die #replace-Makros verschachtelt werden:
{#settemp -name cb -content {#replace {#replace {#replace {#gettemp cb} -oldtext yy{#asc 32} -newtext y{#asc 32}} -oldtext yy{#asc 13} -newtext y{#asc 13}} -oldtext yy{#asc 10} -newtext y{#asc 10}} ... usw. ... }

Die mögliche Verschachtelungstiefe ist vermutlich begrenzt (bei einer meiner Makroprogrammierungen funktionieren aber immerhin 19 (!) Verschachtelungen). Sie sollten testen, was der PhraseExpress-Parser akzeptiert, als workaround könnten die Ersetzungen ggf. ja auch in zwei Schritten durchgeführt werden...
Abhängig vom Textformat ist es vielleicht hinreichend, nur asc 13 und nicht asc 13 UND asc 10 zu ersetzen.

Peter
Win 10-1607 64 bit - PhraseExpress 13.0.55i

rso
Posts: 22
Joined: 04 Jun 15, 14:36

Re: String am Wortende finden und ersetzen

Post by rso » 11 Dec 17, 23:42

Danke für die Tipps; ich habe die Regeln auf 12 Fälle begrenzt und es klappt gut. Auch in einem anderen Makro habe ich inzwischen 12 Verschachtelungen im Einsatz, noch tiefer habe ich mich nicht getraut. :)

Post Reply