Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 17.07.2005 - 10:22 Titel: Suchen- / Ersetzen mit Text Item Delimiters |
|
|
Hier eine ausführlichere Version von Suchen/Ersetzen mit AppleScript's text item delimiters.
Das Problem bei der Benutzung der text item delimiters besteht darin, dass wirklich alle Vorkommen des Suchtextes ersetzt werden. Leider aber auch, wenn der Suchtext nur ein Teil eines Wortes ist.
Um die Groß-/Kleinschreibung zu beachten, habe ich 'considering case' verwendet. Das allein grenzt die Treffer schon ein.
Beispiel der Problematik:
Suchwort: Bau
Ersatzwort: XXX
Aus Bau wird richtig XXX
aber
Baumeister wird zu XXXmeister
Bauer wird zu XXXer
Lösung: Zum Suchwort bzw. Ersatzwort werden jeweils ein Zeichen hinzugefügt, dass es als einzelnes Wort abgrenzt - Leerzeichen, Punkt usw.
Aus den Ausgangswerten wird jeweils eine Suchliste und eine Ersatzliste erstellt. Diese Liste wird in einer Schleife abgearbeitet. Es finden also mehrere Suchen-/Ersetzen-Vorgänge statt.
Code:
set Suche to "Bau"
set Ersatz to "XXX"
set SearchList to {Suche & " ", Suche & ".", Suche & ",", ¬
Suche & ";", Suche & "!", Suche & "?"}
set ErsatZListe to {Ersatz & " ", Ersatz & ".", Ersatz & ",", ¬
Ersatz & ";", Ersatz & "!", Ersatz & "?"}
set derText to "Es gibt viele Bauarbeiter, die nichts davon halten, literweise Bier in sich hinein zu schütten. In den Bau wandern will keiner.
Bauern haben auf dem Bau nichts zu suchen, schon eher beim Schachspiel. Eine Bauanleitung dazu benötigt man nicht.
Der Bauer ist so schlau und wandert in den Bau.
Baue nie auf Sand - das knirscht so laut.
Bau dir doch ein Schloss. Ich will mir ein Haus bauen. Darum bau ich mir kein Schloss."
repeat with i from 1 to count of SearchList
set sW to item i of SearchList
set eW to item i of ErsatZListe
set derText to Ersetzen(derText, sW, eW)
end repeat
on Ersetzen(gesamterText, Suchwort, Ersatzwort)
considering case
set AppleScript's text item delimiters to Suchwort
set TextListe to text items of gesamterText
set AppleScript's text item delimiters to Ersatzwort
set derText to TextListe as text
set AppleScript's text item delimiters to ""
return derText
end considering
end Ersetzen _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Jürgen Venne •->


Anmeldedatum: 19.08.2005 Beiträge: 14 Wohnort: 46519 Alpen-Veen
|
Verfasst am: 19.08.2005 - 07:53 Titel: |
|
|
Hallo Snow,
Das klassische Applescript ist ja nicht schlecht, aber wer Platz sparen möchte und nur einen Einzeiler einsetzen möchte, der kann auch mit dem Unix-Tool "sed" arbeiten.
Das folgende Applescript erfüllt den gleichen Zweck, mit dem Unterschied, das alle von Unix als Whitespace und Interpunktionszeichen definierten Zeichen zum tauschen benutzt werden.
--#######################
set Suche to "Bau"
set Ersatz to "XXX"
set derText to "Es gibt viele Bauarbeiter, die nichts davon halten, literweise Bier in sich hinein zu schütten. In den Bau wandern will keiner. Bauern haben auf dem Bau nichts zu suchen, schon eher beim Schachspiel. Eine Bauanleitung dazu benötigt man nicht. Der Bauer ist so schlau und wandert in den Bau. Baue nie auf Sand - das knirscht so laut. Bau dir doch ein Schloss. Ich will mir ein Haus bauen. Darum bau ich mir kein Schloss. Bau, Bau. Bauteil: Bau; Bau?"
do shell script "echo \"" & derText & "\" | sed 's/" & Suche & "\\([[:space:][:punct:]]\\)/" & Ersatz & "\\1/g'"
--######################## _________________ Viele Grüße
Jürgen Venne |
|