Fischer-Bayern.de
Letztes Update: 12.01.2005 | 1:11:10 Uhr
Write (1) 
Peter Fischer


Wenn Sie umfangreichere Texte in Ihren Skripten verwenden, kann es von Vorteil sein, diese Texte aus externen Dateien einzulesen. Ihr Skript bleibt dadurch wesentlich übersichtlicher und sie müssen spezielle Zeichen wie Anführungszeichen nicht mit einem Backslash maskieren.

Die Standard Additions bieten Ihnen zu diesem Zweck die Befehle read und write. Man kann also nicht nur Daten aus einer Datei lesen, sondern ebenso in diese Datei schreiben.

Bei der Verwendung des read- oder write-Befehls arbeitet AppleScript mit einem Positionszeiger (file mark), den wir mit dem Cursor in einer Textverarbeitung vergleichen können. Das Lesen und Schreiben beginnt immer an der Position dieses Zeigers. Der Positionszeiger wird dann innerhalb der Datei um die jeweilige Textmenge (in Bytes) nach hinten verschoben.

Voraussetzung, um aus einer Datei lesen oder in diese Datei schreiben zu können ist, dass der Zugriff auf diese Datei freigegeben wird. Dies geschieht mit dem Befehl:

open for access

Wenn wir in die Datei schreiben wollen, muss das beim Öffnen des Dateizugriffes zusätzlich berücksichtigt werden durch den Zusatz:

with write permission

Natürlich müssen wir noch angeben, um welche Datei es sich handelt. Die gesamte Befehlszeile sieht demnach so aus:

open for access file ¬
        "Festplatte:Skripts:MeineDatei" with write permission
Den Dateipfad können Sie angeben indem Sie 'file' oder 'alias' vor den Pfad setzen. Wenn Sie 'alias' verwenden, muss die Datei bereits existieren, bei 'file' wird ggf. eine neue leere Datei an der entsprechenden Position erzeugt.

Vorsicht! Falls die OSAX 'Akua Sweets' installiert ist, funktioniert es auch ohne 'file' oder 'alias' anzugeben. Wenn das Skript aber auf einem Rechner ohne diese OSAX laufen soll, dürfen Sie die Angabe nicht vergessen.

Wenn Sie das Eventprotokoll ansehen, werden Sie feststellen, dass durch den 'open for access' Befehl eine Nummer vergeben wird. Das Betriebssystem kodiert Dateireferenzen systemintern durch Zahlen.
Für die weiteren Schritte in unserem Skript benötigen wir diese Nummer. Wir müssen sie also in einer Variablen festhalten.

set RefNum to (open for access file ¬
         "Festplatte:Skripte:MeineDatei" with write permission)
Wir haben also jetzt den Zugriff auf unsere Datei geöffnet. Durch die Verwendung von 'file' wird die Datei angelegt, falls sie noch nicht existiert. Nun können wir in diese Datei schreiben. Jetzt ist also der write-Befehl an der Reihe.
set RefNum to (open for access file ¬
         "Festplatte:Skripte:MeineDatei" with write permission)
write "Das ist mein Text zum Testen." & return & ¬
      "Es könnte durchaus noch mehr sein" to RefNum
Bevor wir mehr aus dem Skript machen, möchte ich Sie aber auf das erste Problem hinweisen. Sobald Sie das Skript ein zweites Mal ausführen, erhalten Sie eine Fehlermeldung:

File Festplatte:Skripte:MeineDatei is already open

Durch Öffnen des Dateizugriffes wurde eine Dateireferenznummer vergeben. Diese wirkt wie eine Transaktionsnummer. D.h. solange dieser Dateizugriff nicht abgeschlossen ist, kann nicht mehr auf die Datei zugegriffen werden. Zum Schließen des Dateizugriffes verwenden wir:

close access RefNum

Eine Datei, deren Zugriff geöffnet ist, lässt sich erst nach einem Neustart löschen. Daher ist es wichtig, sicherzustellen, dass der Zugriff wieder geschlossen wird.

Eine Grundstruktur, die das sicherstellt sieht so aus:

set RefNum to (open for access file ¬
         "Festplatte:Skripte:MeineDatei" with write permission)
try
     write "Das ist mein Text zum Testen." & return & ¬
      "Es könnte durchaus noch mehr sein" to RefNum
     close access RefNum
on error
     close access RefNum
end try          

Das Problem wäre also gelöst. Selbst wenn während der Schreiboperation ein Fehler auftritt, wird der Dateizugriff wieder geschlossen.

Hier geht's weiter ... denn es gibt noch viel zu lesen.



 

 

Workshop



snow@fischer-bayern.de

Ebene 1