Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1955 Wohnort: Deiningen
|
Verfasst am: 28.04.2003 - 17:31 Titel: Programm: AppleScript - Funktion: suchen/ersetzen |
|
|
Beschreibung:
Um alle Vorkommen eines bestimmtes Zeichens in einem Text auf einen Rutsch durch ein anderes Zeichen zu ersetzen, braucht man nicht unbedingt die Hilfe einer Scripting Addition. Allein mit AppleScript-Mitteln ist dies machbar.
Code:
set myText to "Dieser Text möchte gern ohne ö's auskommen können."
set mySearch to "ö"
set myReplace to "oe"
textReplace(myText, mySearch, myReplace)
------------------------------------------------------------------------------
on textReplace(theText, srchStrng, replStrng)
tell (a reference to AppleScript's text item delimiters)
set { od, contents } to { contents, { srchStrng } }
try
set { textList, contents } to { (text items of theText), { replStrng } }
set { newText, contents } to { (textList as text), od }
return item 1 of result
on error errMsg number errNbr
set contents to od
error errMsg number errNbr
end try
end tell
end textReplace
Anmerkung: Der 'textReplace'-Handler stammt in dieser Form von Marc K. Myers. Er ist zwar nicht besonders leicht zu verstehen, dafür ist der Code jedoch recht kompakt und effizient. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
Armin Egginger •-->


Anmeldedatum: 04.05.2002 Beiträge: 96 Wohnort: Germering (b. München)
|
Verfasst am: 10.05.2003 - 17:37 Titel: |
|
|
Hier mal andere Möglichkeiten, die Buchstaben auszutauschen.
Dieses Script tauscht die einzelnen Buchstaben
- im ASCII Code gekennzeichnet oder
- als direkter Buchstabe gekennzeichnet
gegen einen eingestellten Buchstaben aus. Der erste Teil ist mit Schleife, so daß auch gleich mehrere Buchstaben ausgetauscht werden. Der Handler ist auch bei mehreren Aufrufen in verschiedenen Stellen des Skripts sinnvoll.
Code:
set xEmail to "DerTester <info@derTester.de>"
-- 62, 60, 64 sind die größer/kleiner und das @ Zeichen
set charList to {62, 60, 64}
-- 32, 32, 45 sind Leerzeichen und Bindestrich
set cList to {32, 32, 45}
repeat with n from 1 to (count every item in charList)
set prevTID to AppleScript's text item delimiters
set AppleScript's text item delimiters to ASCII character (item n of charList)
set xEmail to text items of xEmail
set AppleScript's text item delimiters to ASCII character (item n of cList)
set xEmail to xEmail as text
set AppleScript's text item delimiters to prevTID
end repeat
display dialog xEmail
-- oder als Handler
set xtex to "Ein Text, bei dem das -@- getauscht werden soll!"
set xChar to "@"
set xCharRepl to "at"
set xtex to TIDsearchReplace(xtex, xChar, xCharRepl) of me
display dialog xtex
on TIDsearchReplace(xtex, xChar, xCharRepl)
set oldTID to AppleScript's text item delimiters
set AppleScript's text item delimiters to xChar
set xtex to text items of xtex
set AppleScript's text item delimiters to xCharRepl
set xtex to xtex as text
set AppleScript's text item delimiters to oldTID
return xtex
end TIDsearchReplace
Viel Spaß
Armin |
|
Nach oben |
|
 |
UliTs •->

Anmeldedatum: 26.06.2011 Beiträge: 3 Wohnort: Aachen
|
Verfasst am: 26.06.2011 - 14:48 Titel: |
|
|
Hallo,
vielen Dank für die beiden Script-Funktionen (oder sagt man Script-Handler?).
Wenn ich z.B. "Jahrgang" durch "||" ersetzen möchte, funktionieren beide Funktionen.
Ich möchte aber das Zeilenendesymbol (#13#10) durch "||" ersetzen, damit ich bei einem mehrzeiligen Text nur noch eine Zeile habe:
Code: | -- in aNote steht der mehrzeilige Text.
set findThis to (ASCII character 13) & (ASCII character 10)
set replaceWith to "||"
set aNote2 to textReplace(aNote, findThis, replaceWith) of me
|
Hier versagen beide Funktionen. Auch wenn ich nur #13 oder nur #10 ersetzen möchte, passiert nichts. Was mache ich falsch?
Uli |
|
Nach oben |
|
 |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 29.06.2011 - 09:58 Titel: |
|
|
Ob es funktioniert oder nicht, hängt davon ab wo Dein Text herkommt. Das MAC OS X verwendet als UNIX-System den LF (ASCII character 10), das MAC OS Classic den CR (ASCII character 13) und auf WINDOWS-Systemen wird CRLF verwendet. Die verschiedenen Möglichkeiten kannst Du sehen, wenn Du im AppleSkript-Editor ein File im Text-Format speicherst.
Auf dem Mac OS X sollte es so gehen:
Code: | set findThis to ASCII character 10 |
Jedenfalls habe ich es damit probiert und es hat geklappt.
Noch eine Bemerkung: Anstelle von ASCII character 13 kannst Du auch die AS-Konstante return verwenden, das ist kürzer. Der Ausdruck id of return ergibt also auch 13. |
|
Nach oben |
|
 |
UliTs •->

Anmeldedatum: 26.06.2011 Beiträge: 3 Wohnort: Aachen
|
Verfasst am: 29.06.2011 - 11:29 Titel: |
|
|
Hallo woodpecker,
vielen Dank für Deine Hilfe! Genau Deinen Code hatte ich schon mehrfach getestet. Da klappte es nicht. Wahrscheinlich hatte ich da noch andere Fehler drin ...
Nachdem ich es jetzt noch einmal mit Deiner Codezeile probiert habe, funktionierte es auf Anhieb! Super und vielen Dank!
--
Jetzt habe ich noch ein kleines Problem: die Zeichensätze...
Hat jemand einen Tip, wie ich die Umlaute in der CSV-Datei (ANSI-Code) richtig hinbekomme?
Uli |
|
Nach oben |
|
 |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 30.06.2011 - 11:03 Titel: |
|
|
Hallo Uli,
könntest Du Dein Problem etwas präzisieren? Was willst Du erreichen, was hast Du probiert und was funktioniert nicht so wie Du es willst?
Gruß woddpecker |
|
Nach oben |
|
 |
UliTs •->

Anmeldedatum: 26.06.2011 Beiträge: 3 Wohnort: Aachen
|
Verfasst am: 30.06.2011 - 12:26 Titel: |
|
|
Hallo Woodpecker,
vielen Dank für die Nachricht.
Ich möchte mit einem Applescript mein Adressbuch in Form einer CSV-Datei anderen zur Verfügung stellen. Das klappt inzwischen sehr gut bis auf die Umlaute, da die "Windows-Welt" ANSI-Code erwartet.
Ich bin in der Lage, die Umlaute Dank der hier vorliegenden beiden Funktionen zu konvertieren (für jeden Umlaut 1 x die Funktion aufrufen), z.B. für das kleine "ü": Code: | set findThis to ASCII character 159 -- kann ich hier auch Hex 9F angeben?
set replaceWith to ASCII character 252 -- kann ich hier auch Hex FC angeben?
| Aber vielleicht gibt es eine elegantere Lösung oder eine Standard-Funktion?
Uli |
|
Nach oben |
|
 |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 30.06.2011 - 13:21 Titel: |
|
|
Zitat: | Aber vielleicht gibt es eine elegantere Lösung |
Vielleicht mit einem sed-Aufruf? Damit kannst Du alle 3 Umlaute in Gross- und Kleinschreibung auf einmal erschlagen. Das könnte ungefähr so aussehen:
Code: | set txt to "Müller-Lüdenscheid
Möller-Krömelhagen
Räufel-Rätzelstein"
do shell script "sed 'y/äöüÄÖÜ/öüäÖÜÄ/' <<+++
" & txt
|
Das y-Subkommando des sed-Kommandos übersetzt einzelne Zeichen eines Textes in andere Zeichen. Die beiden Strings müssen immer dieselbe Länge haben (ist irgendwie klar, oder?).
Ich habe jetzt beispielhaft mal alle ä gegen ö, alle ö gegen ü und alle ü gegen ä getauscht. Du musst auf der rechten Seite natürlich die richtigen Zeichen einsetzen. In meinem Beispiel kommt das raus:
Code: | "Mäller-Lädenscheid
Müller-Krümelhagen
Röufel-Rötzelstein" |
Versuch's mal so. |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1068
|
Verfasst am: 30.06.2011 - 20:03 Titel: |
|
|
Besser wär's UliTs, Du wüßtest die benötigten Zeichensätze. Perl kann Konvertierungen von Zeichensätzen von Haus aus. _________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
 |
|