Abonnieren  Kündigen          
        

Externe Skripten integrieren

Nehmen die eigenen Skripten an Umfang zu, dann wird die Arbeit im Skripteditor schnell unübersichtlich. Die ganzen Klammern, Einrückungen und Funktionen tragen zur Übersicht nicht mehr viel bei und die eine oder andere Funktion, die mit viel Liebe zum Detail entwickelt würde, wäre auch bei einem ganz anderen Skript hilfreich. AppleScript bietet zwei Möglichkeiten, auf die Funktionen anderer Skripten zurück zu greifen. Zunächst ist es mit dem Befehl run script möglich, ein externes Skript aufzurufen und auszuführen. Darüber hinaus kann mit der Anweisung load script ein externes Skript geladen werden und dessen Funktionen können dann in der gleichen Weise angesprochen werden, als wären sie Teil des aufrufenden Skriptes.

Externe Skripten ausführen mit run script

Die Anweisung run script dient dazu, ein Skript aufzurufen und auszuführen, das bereits in Form einer Datei vorliegt. Dieses wird dann ausgeführt und dessen Ergebnisse stehen dem aufrufenden Skript zur Verfügung. Von besonderer Bedeutung ist hier der Handler on run. Die in dieser Funktion enthaltenen Anweisung werden ausgeführt, wenn das Skript aufgerufen wird. Im nachfolgenden Beispiel wird eine einfache Funktion definiert, die eine Variable Nachricht entgegen nimmt und eine Warnung ausgibt.

on run (Nachricht)
    display dialog Nachricht with icon caution
end run

Das externe Skript besteht lediglich aus einer mit on run eingeleiteten Funktion, die eine Nachricht ausgibt.

Anstelle der simplen Ausgabe einer Nachricht könnten in diesem Skript natürlich komplizierte Anweisungen, beispielsweise die automatische Einbindung eines Netzwerk-Volumes mit anschließendem Kopiervorgang wichtiger Dateien, stehen. Dieses Skript wird nun im persönlichen Ordner des Benutzers kai auf der Partition MrsBrain mit dem Dateinamen Warnung.scpt gespeichert. Aufrufen und ausführen lässt es sich nun mit folgender Zeile:

run script ("MrsBrain:Users:kai:Warnung.scpt" as alias) with parameters {"Obacht"}

Der Befehl run script benötigt als erstes die Angabe einer externen Datei, die das auszuführende Skript enthält. Diese Angabe muss in Form eines Dateiobjektes (Alias in der Terminologie von AppleScript) erfolgen. Daher wurde mit Hilfe der Klammern () die Angabe gleich mit Hilfe as alias in ein Dateiobjekt umgewandelt. In dem einzubindenden Skript Warnung.scpt wurde in der Funktion on run eine Variable definiert, deren Wert als Parameter übergeben werden muss. Andernfalls würde eine Fehlermeldung erfolgen, denn in Warnung.scpt wurde die Variable Nachricht nicht definiert. Die Übergabe von Parametern an ein externes Skript erfolgt durch den Zusatz with parameters und den Parametern in Form eine Liste, die mit { } umschlossen wird. In diesem Aufruf wird die Zeichenkette der Wert Obacht als Parameter übergeben. Die Variable Nachricht in dem aufgerufenen Skript Warnung.scpt hat demnach den Wert Obacht und dementsprechend wird die Dialogbox mit dem Text »Obacht« angezeigt. Es ist auch möglich, ein Skript einzubinden, dass keinerlei externer Parameter bedarf. In diesem Fall kann die Angabe with parameters komplett entfallen. Wenn mehrere Parameter von der Funktion on run benötigt werden, etwa um zwei Nachrichten auszugeben oder mehrere Ordner zu kopieren, dann muss die Liste der Parameter erweitert werden und die Angabe könnte with parameters {Wert1, Wert2, Wert3} lauten.

Externe Funktionen integrieren

Der Aufruf und die automatische Ausführung eines externen Skriptes kann dann angebracht sein, wenn es für sich steht und eine klar definierte Aufgabe erfüllt. Anders verhält es sich, wenn in Funktionen für bestimmte Aufgaben wie etwa die Manipulation von Texten Lösungen entwickelt wurden, die auch anderen Skripten zugänglich gemacht werden sollen. Eine Lösung könnte natürlich darin bestehen, einfach den Quellcode der gesamten Funktion über die Zwischenablage zu kopieren und in die Skripten einzufügen. Dieses Verfahren ist aber aus zwei Gründen nicht sehr effektiv: Einerseits ist es unnötige Handarbeit und der Code der Skripten wird unnötig aufgebläht. Andererseits kann es vorkommen, dass die eine oder andere Funktion im Laufe der Zeit verbessert und verfeinert wird. Dann müsste der Quellcode aller Skripten geändert werden. Einfacher ist es, die Funktion zur Textbearbeitung in einem Skript zu speichern und dieses immer dann einzubinden, wenn Text bearbeitet werden muss. Für diese Aufgabe ist der Befehl load script vorgesehen.

on Warnung(Nachricht)
    display dialog Nachricht with icon caution
end Warnung

Das Skript Warnung.scpt besteht nun aus einer Funktion Warnung().

Für ein einfaches Beispiel wird das Skript Warnung.scpt ein wenig modifiziert. Anstelle der Funktion on run wird nun eine Funktion Warnung mit einer Variable definiert. Auch diese Funktion gibt wieder lediglich eine Nachricht aus, aber es wäre hier auch leicht möglich, eine komplexe Routine einzufügen, die beispielsweise den Text alphabetisch sortiert und durchnummeriert.

set Externes_Skript to load script "MrsBrain:Users:kai:Warnung.scpt" as alias
tell Externes_Skript
    Warnung("Hallo")
end tell

Das Skript Warnung.scpt wird eingebunden, die darin enthaltene Funktion Warnung() aufgerufen und ihr zugleich ein Parameter übergeben.

Über load script lässt sich diese Funktion nun auch in einem anderen Skript verwenden. Der erste Schritt besteht darin, mit set Externes_Skript dem einzubindenden Skript einen Namen zu geben, unter dem es angesprochen werden kann. In diesem Fall Externes_Skript. Mit der Anweisung to load script "MrsBrain:Users:kai:Warnung.scpt" as alias wird das externe Skript geladen und seine Funktionen stehen zur Verfügung. Auch bei load script muss wie bei run script mit as alias ein Dateiobjekt angegeben werden. Die Funktionen des externen Skriptes können in Form eines tell-Blocks so angesprochen werden, als würde es sich um ein Programm oder eine Scripting Addition handeln. Hier wird lediglich die Funktion Warnung() aufgerufen und ihr der Text »Hallo« als Parameter übergeben.

Die Dialogbox wurde über die importierte Funktion Warnung() erzeugt.

Modularisierung

Die Dialogboxen sind natürlich alles andere als eindrucksvolle Beispiele. Wie hoch die Zeit- und Arbeitsersparnis sein kann, wenn Aufgaben und Routinen in eigenen Dateien externalisiert werden, kann vielleicht bei folgendem Beispiel deutlich werden: Eine Funktion hat die Aufgabe, einen längeren Text entgegen zu nehmen und diesen anschließend in seine einzelnen Sätze zu zerlegen. Diese Sätze werden dann nach ihrer Länge sortiert und bei dieser Sortierung sollen alle Sätze, die die Zeichenfolge ABC enthalten nicht berücksichtigt und gelöscht werden. Im letzten Schritt werden alle Sätze wieder zu einem einzelnen Text zusammen gesetzt und die jetzt noch enthaltene Anzahl der Zeichen ausgegeben. Diese Textverarbeitung würde in AppleScript etliche Zeilen Code benötigen. Würde einmal eine tragfähige Funktion erarbeitet und diese in einer eigenen Datei gespeichert, dann könnten andere Skripten durch die Einbindung dieser Datei und Ansprache der enthaltenen Sortierungsfunktion sofort Texte gemäß der Vorgaben sortieren. Umgekehrt würden Verbesserungen oder Änderungen an der Funktion sofort allen Skripten zur Verfügung stehen, die auf diese Datei zurück greifen. Über kurz oder lang ließe sich so eine eigene Bibliothek an Funktionen und Routinen erstellen, die bei Bedarf zur Verfügung stehen.

Kontakt | Impressum | © Kai Surendorf

Benutzeranmeldung

Shout Box

Kai Surendorf:

Arbeitsbelastung ist wieder auf

Kai Surendorf:

ein erträgliches Maß gesunken.

Kai Surendorf:

MarsEdit wird gerade getestet

Anmelden oder Registrieren um zu shouten.
Alle Shouts

RSS-Feeds

 
Die Episoden des Podcast zum Abonnement 

Werbung

In dieser Rubrik finden Sie eine Übersicht der Publikationen inklusive Inhaltsverzeichnis, Leseprobe und Pressestimmen.

Unter <opencontent> finden Sie eine Reihe von längeren Texten, die sich einigen Themen detaillierter widmen.

Die StickyBits sind das etwas unregelmäßig erscheinende Webzine auf mac.delta-c

Die regelmäßig aktualisierten Notizen verlinken kurz und knapp auf neue Programme, Tools, Artikel und Tutorials.

Unregelmäßig erscheinen neue Folgen im Screencast.

Im Podcast finden Sie launige, rein subjektive Kommentare zum Geschehen rund um Apple.

In dieser Rubrik finden Sie meine Meinung über Freeware, Shareware und kommerzielle Programme und weitere Produkte.

Das Forum ist ein Angebot, sich über die Publikationen im Speziellen und Mac OS X in all seinen Facetten generell auszutauschen.