21.9 Arbeit mit Texten 

Ein nicht unwesentlicher Teil der Zeit vor dem Computer vergeht in der Regel mit der Arbeit an Texten jedweder Art. AppleScript bringt einige praktische Möglichkeiten mit, Text in Variablen einzulesen und zu bearbeiten.
| Text in Variablen einlesen | Nehmen Sie an, Sie haben im Programm TextEdit ein Dokument erstellt, das zwei oder mehr Absätze enthält. Sie möchten nun den gesamten Text auf den ersten Absatz reduzieren. Hierzu muss zuerst der Editor angesprochen werden, dann der gesamte Text des Dokumentes ausgelesen und auf den ersten Absatz reduziert sowie schließlich wieder in das Dokument zurück geschrieben werden. |
21.9.1 Absätze verarbeiten 

Das folgende Skript geht davon, dass der Text bereits von Ihnen geöffnet wurde und sich im vordersten Fenster befindet:
tell application "TextEdit" set Dokument to text of first document set Absatz to first paragraph of Dokument set text of first document to Absatz end tell
In die Variable Dokument wird zuerst der gesamte Text des im Finder an vorderster Stelle befindlichen Fensters eingelesen. Anschließend wird diese Variable auf den ersten Absatz reduziert. Anstatt mit first den ersten Absatz anzusprechen, können Sie zum Beispiel mit einer Ganzzahl wie 4 auch den vierten Absatz auswählen. Nachdem nach der Reduktion nur noch ein Absatz vorhanden ist, wird der Text des ersten Dokuments mit diesem gefüllt.
Das Skript lässt sich auch auf eine Zeile konzentrieren. Die Anzeige ist jedoch unübersichtlicher und der Lerneffekt für die Arbeit geht dabei etwas verloren:
tell application "TextEdit" set text of first document to first paragraph of first document end tell
Dieses Skript erscheint zwar redundant, eine Befehlszeile von AppleScript wird jedoch nicht zwangsläufig von links nach rechts eingelesen, sondern immer als vollständiges Statement. Dementsprechend wird auch der Text, der schon vorhanden ist, nicht durch die ersten fünf Anweisungen gelöscht.
21.9.2 Wörter verarbeiten 

Anstatt ganze Absätze zu verarbeiten, können Sie auch mit einzelnen Wörtern Aktionen durchführen. Das Skript
tell application "TextEdit" set Absatz to first paragraph of first document set Anzahl to count words of Absatz repeat with Zaehler from 1 to Anzahl set Wort to word Zaehler of Absatz as string say Wort end repeat end tell
liest, wie schon das vorherige Beispiel, den ersten Absatz ein, spricht diesen aber Wort für Wort. Hierbei bedient es sich einer Schleife mit Hilfe von repeat. Um die Wörter einzeln ansprechen zu können, muss zuerst mit count die Anzahl der Wörter ermittelt werden. Die Schleife wird vom Wert 1 ausgehend so oft durchlaufen, bis die Variable Zaehler den gleichen Wert erreicht hat wie die Anzahl der Wörter. Das jeweilige Wort wird dann in eine Variable eingelesen und schließlich vorgelesen.
| Umwandeln in Text | Die Umwandlung der Wörter in reinen Text mag verwirren. Sie ist aber notwendig, weil das von TextEdit zurückgegebene Objekt nicht aus reinem Text besteht, sondern noch Zusatzinformationen wie Schriftgröße, Zeichensatz und Farbe enthält. Solche Angaben lassen sich schlecht vorlesen. |
Zwar können Sie bei Variablen, die Ganzzahlen enthalten, ohne Probleme die gängigen mathematischen Verfahren anwenden und etwa mit set Zaehler to Zaehler + 10 den Wert der Variablen um 10 erhöhen oder mit set Zaehler to Zaehler / 10 durch 10 teilen, bei Variablen mit Text funktioniert dies hingegen nicht. Sie müssen stattdessen das &-Zeichen verwenden, um mehrere Variablen zu einer zu addieren.
Um zum Beispiel im ersten Absatz eines Dokumentes alle Leerzeichen durch Minuszeichen zu ersetzen, können Sie den Absatz zuerst in einzelne Wörter aufbrechen und diese dann, von einem Minuszeichen getrennt, wieder zusammensetzen. Das passende Skript lautet wie folgt:
tell application "TextEdit" set Absatz to first paragraph of first document set Anzahl to count words of Absatz set Ergebnis to "" repeat with Zaehler from 1 to Anzahl set Wort to word Zaehler of Absatz as string set Ergebnis to Ergebnis & Wort & "-" end repeat end tell
Der Aufbau dieses Skriptes entspricht weitgehend dem vorhergehenden. Der Unterschied besteht aber darin, dass zuerst eine leere Variable Ergebnis definiert wird. Anstelle der Sprachausgabe wird an diese Variable das jeweils aktuelle Wort, gefolgt von einem Minuszeichen, angehängt. Die Definition des Minuszeichens in einer Variablen, die angehängt wird, ist nicht erforderlich. Sie können diesen vorgegebenen Text mit Hilfe zweier Anführungsstriche auch im Skript fest angeben.
21.9.3 Text formatieren 

Direkt von TextEdit übergebene Texte lassen sich nicht mit say vorlesen. Sie enthalten noch Werte zur Formatierung, die Sie ebenfalls mit Hilfe von AppleScript verändern können. Nehmen wir eine Textdatei im RTF-Format, bei der wir den ersten Absatz mit einer Schriftgröße von 18 Punkt und der Schriftart Times, den zweiten Absatz mit einer Schriftgröße 14 Punkt und der Schriftart Courier und im dritten Absatz lediglich den ersten Buchstaben als Initiale mit einer Größe von 24 Punkt versehen wollen. Mit folgendem Skript kommen wir zum gewünschten Ergebnis:
tell application "TextEdit" tell first document set size of paragraph 1 to 18 set font of paragraph 1 to "Times" set size of paragraph 2 to 14 set font of paragraph 2 to "Courier" set size of character 1 of paragraph 3 to 24 end tell end tell
Dieses Skript ist an sich selbsterklärend. Es wurde lediglich, um sich für jede set-Anweisung die explizite Angabe des Dokuments zu ersparen, ein Block eingefügt, der alle umschlossenen Anweisungen auf das erste Dokument anwendet.
Abbildung 21.16 Den Elementen eines Textes werden einzelne Eigenschaften und deren Werte zugewiesen.
Abbildung 21.17 Der Text wurde mit Hilfe von AppleScript formatiert.
21.9.4 Farben zuweisen 

Wenn Sie Text farbig formatieren möchten oder in einem anderen Zusammenhang eine Farbe zuweisen möchten, können Sie sich auch dafür der Möglichkeiten von AppleScript bedienen. Die Anweisung
set Farbe to choose color
ruft den Farbdialog von Mac OS X auf und speichert die ausgewählte Farbe als RGB-Wert in der Variablen Farbe. Zuweisen ließe sich eine neue Farbe für den Text etwa mit dem Befehl:
set color of character 1 of paragraph 3 to Farbe






Jetzt bestellen


