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 | 
			 
		  |