Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
jeki •->


Anmeldedatum: 29.12.2003 Beiträge: 15 Wohnort: Appenzell
|
Verfasst am: 02.01.2004 - 12:17 Titel: Script einbinden |
|
|
Habe leider mein folgendes Problem nicht im Forum gefunden:
Ich möchte den Anfang meines Scriptes, das ich genau gleich für ein zweites Script benötige, in einem 3en, einzelen Script (oder txt, oder was auch immer) seperat abspeichern.
Dieses seperate Script soll danach eingelesen werden und ausgeführt werden, wobei in diesem Variablen definiert werden die ich später auch benötige.
Die Idee dahinter ist, dass ich danach nicht immer in den beiden Scripten eine evtl. Verbesserung nachführen muss, sondern nur immer ein Mal in einem eigem Script (txt,...)!
Versuche kurzes banales Beispiel zu schildern:
Script 1 (das eingelesen werden soll):
...
set pfadXY to PARTITION:XY: as string
set pfadXZ to PARTITION:XZ: as string
...
Script 2:
...
script1 einlesen
...
move file ZZ to pfadXY
...
Script 3 :
...
script1 einlesen
...
move file ZZ in folder pfadXY to pfadXZ
...
So ungefähr habe ich mir's vorgestellt...
Mir ist klar, dass man durch umwege zu meinem gewünschten resultat kommt.
Vielen Dank für eure Hilfe
mfg jeki _________________ http://www.jerome-wagner.li
http://www.oasen.li
http://www.pisa-pizza.li
-----------------------
@-->---- by jeki |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 02.01.2004 - 14:04 Titel: load script |
|
|
Hallo jeki,
mit 'load script' kannst du ein anderes Script in eine Variable des aktuellen Scripts laden.
Beispiel:
set MeinScript to load script (choose file)
Im aktuellen Script greifst du dann so auf die Variablen zu:
set Pfadangabe1 to pfadXY of MeinScript
set Pfadangabe2 to pfadXZ of MeinScript _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
jeki •->


Anmeldedatum: 29.12.2003 Beiträge: 15 Wohnort: Appenzell
|
Verfasst am: 02.01.2004 - 14:20 Titel: |
|
|
Ups...hab ich irgendwo schon gesehen diese Variante...
Vielen Dank...löst zwar mein Problem nicht, ohne zusätzliche schreibarbeit...wäre auch zu schon gewesen! Ist aber für mein Fall eine Lösung...
Zu meinem Verständnis noch: Wenn ich nun das Script (1) einlese, führt er an der Stelle (im Script (2)), an der ich es aufrufe aus und fährt danach mit meinem restlichen Script (des Script (2)) weiter!
Ich muss also keine bösen Überraschungen in kauf nehmen?!
Vielen Dank noch...
mfg jeki _________________ http://www.jerome-wagner.li
http://www.oasen.li
http://www.pisa-pizza.li
-----------------------
@-->---- by jeki |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 02.01.2004 - 15:38 Titel: |
|
|
Hallo jeki,
das geladene Script wird nicht automatisch ausgeführt (hab' ich vorhin vergessen).
In deinem Fall wäre es aber ganz nützlich, wenn du die Pfadangaben des ersten Scripts in property-Variablen speichern würdest. Dann muss das Script nur geladen werden und du hast Zugriff auf die Werte, wie es oben beschrieben ist.
Soll das geladene Script ausgeführt werden, brauchst du es nur aus deinem zweiten oder dritten Script heraus starten (nachdem es in eine Variable geladen wurde).
run MeinScript
Beispiel:
Das Script mit dem Namen "Library" sieht so aus:
display dialog "Dies ist der normale run-Handler."
on MeineRoutine(MeinParameter)
display dialog MeinParameter as string
end MeineRoutine
Aufrufen kannst du es so:
set myScript to ¬
load script (choose file with prompt "Wo ist die Datei \"Library\"?")
-- 1.
run myScript
-- 2.
tell myScript to MeineRoutine("AppleScript macht Spaß!")
Nachdem es geladen wurde, wird im ersten Aufruf der run-Handler des Scripts gestartet.
Der zweite Aufruf richtet sich direkt an den Handler "MeineRoutine".
Du kannst also recht gezielt vorgehen. So kann man oft verwendete Handler in einem Script speichern und ganz leicht in anderen Scripten benutzen. Ich habe das Script nicht umsonst "Library" genannt.
Natürlich wird man in der Praxis nicht jedesmal nach dem Script "Library" fragen, sondern die Pfadangabe zu diesem Script gleich in einer Property speichern. Nur wenn das Script nicht gefunden wird, sollte wieder 'choose file' in Aktion treten. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 02.01.2004 - 15:49 Titel: |
|
|
Um nochmal auf deinen Ursprungsbeitrag zurück zu kommen:
Schreibe die Pfadangaben in Skript 1 in Property-Variablen:
property pfadXY : "PARTITION:XY:"
property pfadXZ : "PARTITION:XZ:"
Deine Skripte 2 und 3 könnten dann so aussehen:
-- Skript 2:
set MeinSkript to load script (choose file)
-- ...
move file ZZ to (pfadXY of MeinSkript)
-- ...
-- Skript 3:
set MeinSkript to load script (choose file)
-- ...
move file ZZ of folder (pfadXY of MeinSkript) to (pfadXZ of MeinSkript)
-- ... _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
jeki •->


Anmeldedatum: 29.12.2003 Beiträge: 15 Wohnort: Appenzell
|
Verfasst am: 02.01.2004 - 16:11 Titel: |
|
|
Ufff... jetzt ist definitiv der Augenblick aufzuhören...
Ich kann mir Vorstellen in welchen Fällen dies gut sein könnte...leider verfehlt es nun in meinem Fall seinen nutzen...bzw. meine Scripte werden fast zu kompliziert/unüberschaubar...
Aber die Variante mit der "Library" muss ich mir merken...
Obwohl kleine Frage noch:
Ich erhalte immer noch folgende Fehlermeldung: Can't make "PFAD:des:ZU:ladendem:SCRIPTES.scpt" into a file!
Was bedeutet dies? -Kann es mit der art wie ich abspeichere zusammenhängen?
Vielen Dank für deine Hilfe...man lernt immer wieder dazu!
mfg jeki _________________ http://www.jerome-wagner.li
http://www.oasen.li
http://www.pisa-pizza.li
-----------------------
@-->---- by jeki |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
|
Nach oben |
|
 |
jeki •->


Anmeldedatum: 29.12.2003 Beiträge: 15 Wohnort: Appenzell
|
Verfasst am: 02.01.2004 - 17:02 Titel: |
|
|
Au weh...das ganze ist ein wenig umfangreich, hier sind jeweils die Anfänge:
----------Script A----------
jedi.scpt -> gespeichert als Script, nur ausführbar.
Code: |
tell application "Finder"
set PFuserDESKTOP to (path to desktop folder) as string
set OLD to AppleScript's text item delimiters
set AppleScript's text item delimiters to ":"
set LIuserDESKTOP to every text item of PFuserDESKTOP
set USER to item -3 of LIuserDESKTOP
set FIuserpref to (USER & "-pref") as string
set AppleScript's text item delimiters to OLD
set ORpref to "pref"
set ORupdate to "update"
...
--danach kommt noch mehr, d.h. ein Ordner pref wird erstellt
--und in im wird die Datei (USER & "-pref") erstellt.
end tell |
----------Script B----------
hallo.app -> speichere es als Programm, nur ausführbar
Code: |
tell application "Finder"
set PFich to (container of item (path to me)) as string
set JEDI to load script (PFich & "jedi.scpt")
run JEDI
...
--wobei später in diesem Script die Variable USER wieder benötigt wird
--und andere die später im Script A erscheinen...
end tell |
Wie gesagt bringt er mir die Fehlermeldung "Can't make PARTIOTION:...:jedi.scpt into a file."
Ah ja, wenn wir schon dran sind , es gibt sicher noch nebenbei eine schönere Variante den User der angemeldet ist (OSX 10.3.2) zu definieren?!
Und mir ist noch nicht ganz der Unterschied von "as text und "as string" bewusst...bis jetzt hat immer beides funktz!
Danke...hoffe dir genügen meine Angaben...
mfg jeki _________________ http://www.jerome-wagner.li
http://www.oasen.li
http://www.pisa-pizza.li
-----------------------
@-->---- by jeki |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 02.01.2004 - 18:20 Titel: |
|
|
Den Code aus deinem Script B habe ich mal genauso übernommen. Den Fehler kann ich jedoch nicht nachvollziehen. Mein aktuelles System ist noch 10.2.8
Was ich mir allerdings denken könnte ist, dass der 'load script' Befehl innerhalb des Finder-Tell-Blocks die Probleme bereiten könnte. Setze das 'end tell' mal gleich in die dritte Zeile, also noch vor dem load script Befehl.
load script stammt aus den Standard Additions. Wenn du den Befehl an den Finder sendest, muss dieser erst mal versuchen, ihn zu interpretieren. Ist das nicht möglich, wird der Befehl normalerweise automatisch an die Scripting Additions weitergeleitet - sollen doch die mal ihr Glück damit versuchen. Es könnte also sein, dass der Finder hier einfach die Segel streicht und den Befehl nicht mehr weiterleitet.
Den Usernamen kannst du so ermitteln:
tell application "Finder"
set username to name of home
end tell
Klappt jedenfalls hier mit 10.2.8 noch. In den OS X Snippets findest du einen Beitrag mit weiteren Pfadangaben, die beim Scripten nützlich sein können.
Unterschied zwischen "text" und "string":
Soweit ich weiß, besteht da kein Unterschied - ist halt Geschmackssache.
Anders sieht es aus, wenn du "as styled text" benutzst. Das ist dann Text mit Formatierungen. "string" ist auf jeden Fall immer ohne Formatierungen. Wenn du also sicherstellen willst, dass du mit Plain-Text arbeitest, dann nimm "as string". _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
jeki •->


Anmeldedatum: 29.12.2003 Beiträge: 15 Wohnort: Appenzell
|
Verfasst am: 02.01.2004 - 19:03 Titel: |
|
|
Also: Ich habe es nochmals versuch ausserhalb des tell-Blocks...leider ohne Erfolge, habe auch noch probiert den Pfad...
set JEDI to load script ((PFich & "jedi.scpt") as string)
...konsequent in einen String umzuwandeln...ohne Erfolg!
Ich bin ja neu in dieser Gegend unterwegs...aber etwas ist mir aufgefallen: Es scheint das Apple sich eine Freude macht die Script-Sprache bei jedem Systemupdate zu verändern...meine ich das nur oder lieg ich da Richtig!?
-Ja nu, zumindest bereitet uns Apple mehrheitlich Freude!!!
Vielen Dank noch für deine Tipps...
mfg jeki _________________ http://www.jerome-wagner.li
http://www.oasen.li
http://www.pisa-pizza.li
-----------------------
@-->---- by jeki |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 02.01.2004 - 19:36 Titel: |
|
|
Jetzt habe ich fast die gleiche Fehlermeldung:
Can't make {alias "X Disk:Applications:AppleScript:jedi.scpt" into a file.
Heißt es bei dir auch 'alias' vor der Pfadangabe?
'load script' erwartet nämlich eine Referenz in Form von 'alias'.
Im Befehlsverzeichnis der Standard Additions steht:
load script alias
Ich hatte also vorher geschrieben:
set PFich to ((container of item (path to me)) as alias)
Wenn man das Script im Scripteditor ausführt kommt dann natürlich ein Fehler, da 'path to me' auf den Skripteditor verweist und nicht auf das fertige Skript (So habe ich das gerade gemacht). 'path to me' funktioniert erst, wenn das Skript als Programm gespeichert und als solches ausgeführt wurde.
Meine vorhergehenden Versuche zeigen, dass AppleScript aus der Pfadangabe (reiner Text) automatisch eine Referenz auf die entsprechende Skriptdatei macht. Möglicherweise hat sich hier wieder eine Kleinigkeit geändert und du musst 'as alias' extra angeben.
Was passiert denn, wenn du den Pfad voll angibst?
(Dabei darauf achten, dass AppleScript nur Englisch versteht: Benutzer = Users; Dokumente = Documents usw.) _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
jeki •->


Anmeldedatum: 29.12.2003 Beiträge: 15 Wohnort: Appenzell
|
Verfasst am: 02.01.2004 - 20:16 Titel: |
|
|
BINGO...das wars!
Code: |
tell application "Finder"
set PFich to (container of item (path to me)) as string
-- as alias -> beim Pfad eingeben...
set JEDI to load script ((PFich & "jedi.scpt") as alias)
run JEDI
-- danach die Variablen nochmals auslesen...
set MACsound to MACsound of JEDI
set DatumUhrzeit to DatumUhrzeit of JEDI
-- usw...
|
Nochmals endgültig Vielen Dank...
Habe ich auch lernen müssen mein Script als Programm abspeichern damit er "pfath to me" auch versteht...ist aber ein sehr nützlicher Befehl!
O.k. wünsch dir noch einen schönen und erholsamen Abend
Alles gute im neuen Jahr...
mfg jeki _________________ http://www.jerome-wagner.li
http://www.oasen.li
http://www.pisa-pizza.li
-----------------------
@-->---- by jeki |
|
Nach oben |
|
 |
|