Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Read File
Gehe zu Seite 1, 2  Weiter
 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pal05
•->
•->


Anmeldedatum: 15.04.2003
Beiträge: 5

BeitragVerfasst am: 15.04.2003 - 11:26    Titel: Read File Antworten mit Zitat

Hi,

ich verzweifle mit AppleScript. Gibt es nirgendes eine einfache Dokumentation mit Befehl Parameter und Erklärung (wie bei PHP?)
Zu meiner Frage:
1) Ich habe einen Ordner, Applescript soll sobald eine .txt Datei da drinnen ist starten
2) Wie liest man eine Datei aus? =)
Inhalt sind nur Variablen zB DialNum="555-55523", Name="John Doe"
Die ich dann im weiteren Script benötige
3) Danach soll die Datei gelöscht werden.

Freue mich auch über Links zu bestehenden Threads die ich nicht gefunden habe.

Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 15.04.2003 - 19:32    Titel: Antworten mit Zitat

Hallo pal05,

eine Dokumentation wie zu PHP gibt's bei AppleScript nicht. Das liegt daran, dass die AppleScript-Sprache modular ist. Ein paar wenige Grundfunktionen werden durch die AppleScript-Systemerweiterung zur Verfügung gestellt. Der Rest (und hier wird's erst interessant) sind Befehle, die von Scripting Additions und auch von den Anwenderprogrammen geliefert werden. Deshalb ist es unmöglich, eine komplette Dokumentation zu erstellen.

Einblick in die möglichen Befehle bekommst du, wenn du eine Scripting Addition oder ein Programm auf den Scripteditor ziehst. Dann öffnet sich das jeweilige Befehlsverzeichnis. Darin sind die möglichen Befehle, Objekte und Eigenschaften aufgeführt. Leider sind die Erklärungen dazu stets sehr dürftig und man ist oftmals gezwungen, zuerst mal zu experimentieren.

Jetzt aber konkret zu deinen Fragen.
1) Um einen Ordner derart zu überwachen, gibt es zwei Möglichkeiten.
Erstens: Eine entsprechende Ordneraktion an den Ordner anhängen. Nachteil dabei ist, dass der Ordner geöffnet sein muss, damit die Aktion funktioniert. Bei einem geschlossenen Ordner geht das erst ab System X 10.2.

Zum Erstellen von Ordneraktionen studierst du am besten mal die, mit dem System bereits mitgelieferten Aktionen. Zu finden im Systemordner - Scripts - Ordneraktionen.

Zweitens: Ein Skript erstellen, das ständig im Hintergrund läuft und in regelmäßigen Zeitabständen den Ordnerinhalt überprüft. Wird dabei eine Änderung festgestellt, sollte das Skript entsprechend darauf reagieren.

Wie sowas geht, findest zu z.B. in folgendem Thread:

Ordner überwachen


2) Den read-Befehl findest du in der Scripting Addition "Standard Additions".

read: Read data from a file that has been opened for access
read anything -- the reference number, alias, or file specification of the file to read
[ using delimiter anything ] -- the value that separates items to read…
[ using delimiters list ] -- …or up to 2 values that separate items to read
[ as type class ] -- the form in which to read and return data
[ for double integer ] -- the number of bytes to read from current position; if omitted, read until the end of the file
[ before string ] -- read up to but not including this character…
[ until string ] -- …or read up to and including this character
[ from double integer ] -- starting from this position; if omitted, start at last position read from
[ to double integer ] -- stopping at this position
Result: anything -- the data read from the file


Alle Angaben in eckigen Klammern sind optional. Das einfachste Skript wäre demnach:

-- wenn du mit einer Ordneraktion arbeitest,
--
brauchst du natürlich keine feste Pfadangabe
--
die Referenz zur Datei wird bei einer Ordneraktion
--
automatisch in einer Variablen abgelegt
set DateiPfad to "Macintosh HD:desktop folder:data.txt"
--
Datei lesen:
set DateiInhalt to read file DateiPfad


In der Überschrift zum read-Befehl heißt es "Read data from a file that has been opened for access". Unter Umständen muss also erst mal der Zugriff auf die Datei erlaubt werden. Ein etwas umfangreicheres Skript zum Einlesen einer Datei wäre:

tell application "Finder"
set myDisk to the name of startup disk
set meineDatei to myDisk & ":Desktop Folder:MeinText"
open for access alias meineDatei
set RefNum to the result
copy (get eof RefNum) to theEnd
log theEnd -- nur für die Anzeige im Eventprotokoll

try
set derInhalt to (read RefNum for theEnd)
log derInhalt -- nur für die Anzeige im Eventprotokoll
close access RefNum
on error errMsg
display dialog errMsg
close access RefNum
end try
end tell


Nun kommem wir allerdings zu einem Problem: Du schreibst, dass der Inhalt der Datei nur Variablen seien. Das ist aber falsch! Die Datei enthält nur Text. Die entsprechenden "Variablenwerte" müsstest du aus diesem Text also erst mal heraus suchen.

Angenommen, die Datei sieht so aus:

DialNum="555-55523"
Name="John Doe"

Das Ergebnis der obigen Leseaktion wäre folgendes:

"DialNum=\"555-55523\"
Name=\"John Doe\""

Die Daten könnten dann (etwas umständlich) extrahiert werden, indem man den offset-Befehl (siehe Standard Additions) benutzt:

set DateiPfad to "Macintosh HD:desktop folder:data.txt"
--
Datei lesen:
set DateiInhalt to read file DateiPfad

set offDial to (offset of "DialNum" in DateiInhalt)
set offName to (offset of "Name" in DateiInhalt)
set theDialNum to text from (offDial + 9) to (offName - 3) in DateiInhalt
--
Ergebnis: "555-55523"
set theName to ¬
text from (offName + 6) to ((get eof of file DateiPfad) - 1) in DateiInhalt


Somit befinden sich die gewünschten Werte in jeweils einer Variablen und stehen im Skript zur Verfügung.

"offset" liefert die Anfangsposition des gesuchten Wortes. Da die eigentlichen Daten aber erst nach dem "Variablennamen" und dem "=" und dem Anführungszeichen beginnen, wird die entsprechende Anzahl der Zeichen hinzu addiert. Für das Ende der Daten der ersten Zeile gehen wir dann vom nächsten feststehenden Begriff aus: "Name"
Von dessen "Offset-Wert" ziehen wir die Zeilenschaltung und das abschließende Anführungszeichen ab. Dann noch ein Zeichen mehr rechnen, damit man an die Position des Datenendes kommt.
Bei der letzten Zeile der Datei verfahren wir etwas ander. Dort ermitteln wir das Dateiende (eof) und gehen davon um 1 Zeichen zurück (das letzte Zeichen ist ja das abschließende Anführungszeichen).

3) Das Löschen einer Datei ist Aufgabe des Finders (Befehlsverzeichnis des Finders anschauen).

Zwei Möglichkeiten:

delete: Move an item from its container to the trash
delete reference -- the item to delete
Result: reference -- to the item that was just deleted


Anstatt des delete-Befehls kannst du auch schreiben:

set DateiPfad to "Macintosh HD:desktop folder:data.txt"

tell application "Finder"
move alias DateiPfad to the trash
end tell


oder eben:

set DateiPfad to "Macintosh HD:desktop folder:data.txt"

tell application "Finder"
delete alias DateiPfad
end tell


So, jetzt lasse ich dich den Stoff erst mal verdauen. - Dann sehen wir weiter.

Gruß
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
pal05
•->
•->


Anmeldedatum: 15.04.2003
Beiträge: 5

BeitragVerfasst am: 15.04.2003 - 20:25    Titel: Antworten mit Zitat

Hi,

also erstmal DANKE!
Very Happy
So umfangreich die Antwort ist werd ich mir das später nochmal in Ruhe durchlesen und ausprobieren.

Bin einfach nur Platt Aufgrund der umfangreichen Antwort.
Danke

lg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pal05
•->
•->


Anmeldedatum: 15.04.2003
Beiträge: 5

BeitragVerfasst am: 16.04.2003 - 15:02    Titel: Antworten mit Zitat

Hi,

das funktioniert alles Super jedoch habe ich etwas umgedacht und mach es nicht mehr über das Filesystem sondern über Apple Mail.
Jetzt fehlt mir die letzte Variable da ich kein EOF mehr habe.
In moment behelfe ich mir mit einen Pseudo EOF was ich einfach in der Mail dazuschreib.
Gibt es hierfür eine schönere Lösung?

Achja deine Antwort würde super in den Workshop passen =)

lg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 16.04.2003 - 19:12    Titel: Antworten mit Zitat

pal05 hat Folgendes geschrieben:

Jetzt fehlt mir die letzte Variable da ich kein EOF mehr habe.
In moment behelfe ich mir mit einen Pseudo EOF was ich einfach in der Mail dazuschreib.
Gibt es hierfür eine schönere Lösung?


Statt EOF kannst du die "Länge" der Variablen "DateiInhalt" benutzen.

set DateiPfad to "Macintosh HD:desktop folder:data.txt"
--
Datei lesen:
set DateiInhalt to read file DateiPfad

set offDial to (offset of "DialNum" in DateiInhalt)
set offName to (offset of "Name" in DateiInhalt)
set theDialNum to text from (offDial + 9) to (offName - 3) in DateiInhalt
--
Ergebnis: "555-55523"
set theName to ¬
text from (offName + 6) to ((length of DateiInhalt) - 1) in DateiInhalt


Gruß
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
pal05
•->
•->


Anmeldedatum: 15.04.2003
Beiträge: 5

BeitragVerfasst am: 17.04.2003 - 11:14    Titel: Antworten mit Zitat

Hi,

langsam komme ich dahinter.
Also für die "normalen" Befehle wie offset oder length gibt es auch keine Doku? Es ist mir fast schon peinlich nach solchen Befehlen zu Fragen =)
Ich denke ich kann das Script bald fertigstellen wenn da nicht noch ein Problem währe =))
Also ich bekomme eine Mail rein. Applescript wird gestartet wertet die Daten aus und sendet ein Fax mittels Textedit über einen Druckertreiber soweit so gut.
Jetzt fehlt mir nur noch eine Möglichkeit dem Druckdokument ein PDF anzufügen welches dann mitgedruckt wird.
Oder anders rum wie Drucke ich ein PDF? Jedes mal habe ich den Source des PDF's vom Filesystem und nicht das formatierte Dokument selbst (lesbar). Hoffe du hast auch hierfür eine Lösung =)

Danke!

lg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 17.04.2003 - 18:48    Titel: Antworten mit Zitat

pal05 hat Folgendes geschrieben:
Also für die "normalen" Befehle wie offset oder length gibt es auch keine Doku?


"offset" stammt aus den Standard Additions:

offset: Find one piece of text inside another
offset
of
international text -- the source text to find the position of
in international text -- the target text to search in
Result: integer -- the position of the source text in the target, or 0 if not found


"length" gehört zur eigentlichen "Grundausstattung" von AppleScript. Informationen darüber findest du im "AppleScript Language Guide".

AppleScript Language Guide und mehr...


pal05 hat Folgendes geschrieben:

Ich denke ich kann das Script bald fertigstellen wenn da nicht noch ein Problem währe =))
Also ich bekomme eine Mail rein. Applescript wird gestartet wertet die Daten aus und sendet ein Fax mittels Textedit über einen Druckertreiber soweit so gut.
Jetzt fehlt mir nur noch eine Möglichkeit dem Druckdokument ein PDF anzufügen welches dann mitgedruckt wird.
Oder anders rum wie Drucke ich ein PDF? Jedes mal habe ich den Source des PDF's vom Filesystem und nicht das formatierte Dokument selbst (lesbar). Hoffe du hast auch hierfür eine Lösung =)


Da muss ich erst mal passen. Ich habe noch nicht so ganz kapiert, was da wirklich vorgeht. Hm?
Vielleicht wird's ja besser, wenn ich erst mal richtig ausgeschlafen habe. dösend

Gruß
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
pal05
•->
•->


Anmeldedatum: 15.04.2003
Beiträge: 5

BeitragVerfasst am: 05.05.2003 - 10:01    Titel: Antworten mit Zitat

Hi,

jetzt haben wir uns beide wohl gut ausgeschlafen =)
Damit ich nicht wieder zu verwirrend werde mal die Wichtigste Frage.
Wie drucke ich ein PDF File über Applescript?
Ich habe folgendes probiert:
Code:

         tell application "TextEdit"
            print {alias ((path to startup disk as text) & "Users:pal05:test.pdf")}
         end tell

Jedoch passiert es mir dann das ich nicht das formatierte leserliche pdf bekomme sondern den echten Dateiinhalt aus den Filesystem zB
Code:

%PDF-1.3
%\xe4\xe3\xcf\xd2
4 0 obj
<</Type/XObject
/Subtype/Image
/Width 2100
/Height 2970

Ich hoffe das war verständlicher =)

Danke!

lg[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 05.05.2003 - 19:21    Titel: Antworten mit Zitat

Über TextEdit wird das wohl nicht klappen. Wenn du ein PDF mit TextEdit öffnest, siehst du schließlich auch die ganzen Daten. TextEdit will natürlich auch das drucken, was es erkennt.

Hast du schon mal versucht, Print Center per AppleScript anzusteuern?
Ich könnte mir vorstellen, dass du dort mit dem Ausdruck des PDFs mehr Glück hast.

Leider kann ich keine Versuche in der Richtung anstellen, da ich an meinem Pismo keinen Drucker hängen habe.

Probier's doch einfach mal mit deinem Skript, indem du "TextEdit" durch "Print Center" ersetzst.

Gruß
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
SaTiZ
•->
•->


Anmeldedatum: 24.03.2003
Beiträge: 18
Wohnort: Wicker Herkunft:Berlin

BeitragVerfasst am: 09.09.2003 - 12:03    Titel: Antworten mit Zitat

Hallo,

Snow hat Folgendes geschrieben:
In der Überschrift zum read-Befehl heißt es "Read data from a file that has been opened for access". Unter Umständen muss also erst mal der Zugriff auf die Datei erlaubt werden. Ein etwas umfangreicheres Skript zum Einlesen einer Datei wäre:

tell application "Finder"
set myDisk to the name of startup disk
set meineDatei to myDisk & ":Desktop Folder:MeinText"
open for access alias meineDatei
set RefNum to the result
copy (get eof RefNum) to theEnd
log theEnd -- nur für die Anzeige im Eventprotokoll

try
set derInhalt to (read RefNum for theEnd)
log derInhalt -- nur für die Anzeige im Eventprotokoll
close access RefNum
on error errMsg
display dialog errMsg
close access RefNum
end try
end tell



Wenn ich das richtig sehe legst Du den Inhalt der Datei in einer Variablen ab. Das funzt leider bei grossen Bildern nicht.
Kann ich auch ne Datei zeilenweise auslesen? Ich muss ein jpg auf bestimmte Werte prüfen (ohne PhotoShop).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 09.09.2003 - 13:45    Titel: Antworten mit Zitat

Zunächst mal das Skript, ohne den Finder extra zu bemühen:

set myDisk to path to desktop as string
set meineDatei to myDisk & "movie.thumb.jpg"
open for access alias meineDatei
set RefNum to the result
copy (get eof RefNum) to theEnd
log theEnd -- nur für die Anzeige im Eventprotokoll

try
   
set derInhalt to (read RefNum for theEnd)
   
log derInhalt -- nur für die Anzeige im Eventprotokoll
   
close access RefNum
on error errMsg
   
display dialog errMsg
   
close access RefNum
end try


Ich denke, das es mit dem zeilenweise Auslesen nicht klappen wird. Die Daten scheinen "am Stück" zu sein - also eine einzige lange Zeile.

Die einfachste Möglichkeit wäre natürlich jetzt, das Skript als Programm zu speichern und ihm dann mehr Speicher zuzuweisen.

Zum Erstellen des Skript nimmst du am besten "Smile" statt des Skripteditors, denn Smile hat nicht die 32K-Beschränkung.

Eine Möglichkeit, die Daten portionsweise einzulesen wäre, mit "for" zu begrenzen. Im Skriptbeispiel habe ich das ja eigentlich auch getan - aber eben auf das Dateiende. Du kannst allerdings stattdessen die Anzahl der Bytes als Zahl angeben, die gelesen werden sollen.

P.S. Wie überprüft man denn ein Bild anhand des Datensalats? Question
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
SaTiZ
•->
•->


Anmeldedatum: 24.03.2003
Beiträge: 18
Wohnort: Wicker Herkunft:Berlin

BeitragVerfasst am: 10.09.2003 - 09:06    Titel: Antworten mit Zitat

Danke erstmal
Snow hat Folgendes geschrieben:
P.S. Wie überprüft man denn ein Bild anhand des Datensalats? Question


in eps-Bildern sind Meta-Dten enthalten, da kann man so eniges auslesen, z.B. Farbraum, Auflösung etc.
Code:

%%Creator: Adobe Photoshop Version 6.0

%%Title: 970732.eps

%%CreationDate: Wed Jul 23 2003 11:42:32

%%BoundingBox: 0 0 213 198

%%HiResBoundingBox: 0 0 212.64 198.48

%%SuppressDotGainCompensation

%%EndComments

%%BeginProlog

%%EndProlog

%%BeginSetup

%%EndSetup

%ImageData: 886 827 8 3 1 886 1 "beginimage"


Ich brauch jetzt die 886 von %ImageData und die 212.64 von %%HiResBoundingBox.
Aus diesen Zahlen setzt sich der dpi-Wert zusammen: (886*72)/212.64
Das große Problem dabei ist, dass die Metadaten nicht am Anfang stehen. Es kann beliebig vile Müll vorher drinn stehen...

PS. Danke für den Tip mit dem Smile, kann der auch Run-Only-Scripte? Der ScriptDebugger kann die nicht Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 10.09.2003 - 11:58    Titel: Antworten mit Zitat

Zu Smile: Smile sichert Run-Only sogar komfortabler als der Skripteditor, da in diesem Fall immer nur eine Kopie gesichert wird. Es besteht also nie die Gefahr, dass man sich sein Original "absperrt".

Im Zusammenhang mit Bildern könnte für dich die "GraphicsImporter OSAX" interessant sein. Funktioniert zwar nicht mit EPS - aber vielleicht kannst du sie ja doch brauchen.

Beispiel:

set MeinBild to ((path to desktop folder) as string) & "pfiffi.jpg"

giget gi export image type list
log result
giget gi import image type list
log result

set dataRec to {Groesse:{}, Aufloesung:{}, Farbtiefe:0, Qualitaet:0}

set Groesse of dataRec to giget gi size image MeinBild
set Aufloesung of dataRec to giget gi resolution image MeinBild
set Farbtiefe of dataRec to giget gi depth image MeinBild
set Qualitaet of dataRec to giget gi quality image MeinBild

dataRec


Ergebnis:

{Groesse:{220, 186}, Aufloesung:{72.0, 72.0}, Farbtiefe:24, Qualitaet:50.048875855327}
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
SaTiZ
•->
•->


Anmeldedatum: 24.03.2003
Beiträge: 18
Wohnort: Wicker Herkunft:Berlin

BeitragVerfasst am: 11.09.2003 - 12:01    Titel: Antworten mit Zitat

Danke Smile
ich muss erstmal sehen, wie ich an die Zahlen ran komme...

Grüße
SaTiZ, der froh ist sehr wenig mit AppleScript machen zu müßen Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
SaTiZ
•->
•->


Anmeldedatum: 24.03.2003
Beiträge: 18
Wohnort: Wicker Herkunft:Berlin

BeitragVerfasst am: 15.09.2003 - 09:22    Titel: Antworten mit Zitat

Snow hat Folgendes geschrieben:

Ich denke, das es mit dem zeilenweise Auslesen nicht klappen wird. Die Daten scheinen "am Stück" zu sein - also eine einzige lange Zeile.


Nein, es sind einzelne Zeilen, wie könnte ich denn ne Datei zeilenweise auslesen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum Alle Zeiten sind GMT + 2 Stunden
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter