ASS-Projekt: relativer Pfad von scpt-Datei zu scpt-Datei

Chief_Wiggum

Chief_Wiggum

Mitglied
Thread Starter
Dabei seit
17.01.2007
Beiträge
99
Reaktionspunkte
0
Hallo,

in einem vorherigen Thread habe ich mich mit Dateien herum geärgert, die im Skripteditor funktionierten (Dateiendung: .scpt) und im Applescript Studio (Endung .applescript) leider nicht (Compiler-Fehler wegen Sonderzeichen)
Deshalb habe ich in mein ASS-Projekt die .scpt Dateien komplett übernommen.

Jetzt habe ich aber das Problem, dass eine dieser Dateien zwei andere aufrufen soll.
Als Notlösung habe ich den absoluten Pfad angegeben:

Code:
set theFile to "HD:Users:username:Documents:Pfad zum ASS Projekt:Dateiname
set x to myFunction() of (load script (a reference to theFile) as alias)

Das soll natürlich nicht so bleiben...

Wie kann ich nun in der .scpt Datei einen relativen Pfad angeben?
Die schöne Lösung mit
Code:
set x to myFunction() of (load script POSIX file ((path for script "dateiname" extension "scpt") of main bundle))
funktioniert ja nicht bei .scpt Dateien.

Ich hatte schonmal so eine ähnliche Frage, aber ich steh schon wieder auf dem Schlauch.

Please help!

Grüße,
der Chief
 
Hallo,

so:

Code:
	set tmp to ((resource path of main bundle) as string) & "/MeinSkript.scpt"

Viele Grüße
 
In einem AppleScript kannst Du auch folgenden Code verwenden, um den eigenen Standort zu bestimmen:

Code:
set mypath to path to me

Es kann aber sein, daß dieser Befehl nicht den Standort des AppleScripts zurückgibt, sondern stattdessen den Standort des "Mutterprogramms" (ASS). Daher mußt Du es ausprobieren.

Von dort aus kannst Du dann aber einfach die Pfade zu den anderen Dateien relativ bestimmen.
 
Hallo,

Code:
set mypath to path to me

Das ist ebenfalls eine Option. Rate ich aber immer von ab.
Wenn man diese kleine Anweisung im Skripteditor ausführt, dann gibt es eine Überraschung :)
Trotz, dass ein bestehendes Skript als Programm-Bundle gesichert und editiert wird.

Wollte ich nur kurz anmerken, damit da keiner reinläuft :D

Viele Grüße
 
Kurzer Nachtrag:

Also das war nicht böse gemeint. Wollte nur kurz dadrauf hinweisen, dass man da immer drauf achten muss mit Anweisungen, die auf "me" zeigen. Nicht, dass das negativ aufgenommen wurde.

Viele Grüße
 
lso das war nicht böse gemeint. Wollte nur kurz dadrauf hinweisen, dass man da immer drauf achten muss mit Anweisungen, die auf "me" zeigen. Nicht, dass das negativ aufgenommen wurde.

Also von mir bestimmt nicht :D Es ist ja wirklich ein Problem. Wenn man z.B. aus einem RagTime-Dokument heraus ein AppleScript ausführt, gibt der Befehl «path to me» den Pfad zum RagTime-Programm zurück...
 
Also das mit path to me hatte ich auch schon und war, wie zu erwarten, nur der Pfad zu ASS und das ist ganz und gar nicht der Pfad zu meinen Skripten.

"resource path of main bundle" funktioniert auch nicht.
Fehlermeldung: 'expected "," but found property'

Meine .scpt Datei liegt ja auch gar nicht unter "resources" !?!?
Muss ich die .scpt Datei, die ja immer im Skripteditor geöffnet wird, irgendwie als "bundle" speichern?
 
Nachtrag:

Woher soll denn die Datei, die im Skripteditor wissen, was mein "main bundle" ist?
Bzw. wie soll der Skripteditor das erkennen?
Ich blick das echt nicht mehr....
 
Deine Skripte liegen nicht im Main bundle des Hauptprogramms?

äähm: wie ist das jetzt genau gemeint.

Ich habe natürlich einen Ordner mit dem Projektnamen, und darin sind alle Skripte - sei es .applescript oder .scpt.
Aber das Ganze liegt unter "Documents".

Und innerhalb von ASS gehören alle Skripte natürlich auch zum selben Projekt
 
äähm: wie ist das jetzt genau gemeint.

Wenn Dein ASS-Programm gebaut ist, dann liegt es ja als Application bundle vor. Das heißt, Du kannst im Finder auf das Programm-Icon klicken und Dir mit dem Kontextmenü den Paketinhalt ansehen:

Programm.app:Contents:

Und irgendwo dort sollten ja auch Deine Skripte liegen, wenn Du auf die zugreifen willst und das Programm auch andere Leute nutzen wollen.

Wenn nun Deine Skripte (*.scpt) bei «path to me» den Pfad zum Mutterprogramm zurückgeben, dann kannst Du ja den Standort der übrigen Skripte relativ einfach bestimmen:

Code:
set mypath to (path to me) as Unicode text
-- z.B. "DandyDisk:Applications:Programm.app:"
set scriptpath to mypath & "Contents:Resources:Scripts:beispiel.scpt"
 
Ah so, alles klar.

Ja, die Skripte sind im Package mit drin.
Allerdings bringt ein 'path to me' den gesamten Pfad zu diesem Skript, also:

(...):projektordner:build: Debug:projekt.app:Contents:Resources:Scripts: Dateiname.scpt

Damit könnte ich mir dann also per String-Operationen (oder anders) den Parent-Ordner holen und dann den Namen des aufzurufenden Skriptes dran hängen. Das müsste doch dann immer stimmen, seh ich das richtig?
 
Habe es jetzt hingekriegt:

Code:
tell application "Finder"
   set ParentFolder to (parent of (path to me)) as string
end tell
set theFile to ParentFolder & "dateiname.scpt"
set x to myFunction() of (load script (a reference to theFile) as alias)

Wer will, kann das auch noch in eine einzige Zeile zusammen schreiben.
Aber es funktioniert!

Danke euch allen.
Bye,
Clancy Wiggum
 
Hallo,

warum den jetzt so "kompliziert"? ... und auch noch den Finder bemühen?

Bitte, bitte, nicht solche schlechten Angewohnheiten aneignen.

Hier die direkte Lösung:

Code:
	-- Skript-Objekt erzeugen
	set tmpScp to (load script (((resource path of main bundle) as string) & "/Scripts/MeinSkript.scpt") as POSIX file)
	
	-- Funktion ausführen
	set x to myFunction() of tmpScp

Viele Grüße
 
... wenn Du den Mutterordner haben magst, dann so:

Code:
-- Mutterordner einer Datei oder Ordner
on holeMutterOrdner(pfad, alsString)
	if (alsString is true) then
		return (POSIX file ((POSIX path of pfad) & "/..")) as string
	else
		return (POSIX file ((POSIX path of pfad) & "/..")) as alias
	end if
end holeMutterOrdner

Viele Grüße
 
nix für ungut,
aber "resource path of main bundle" funktioniert bei mir nicht!

Ich krieg nen Syntax Error vom Skripteditor, bei dem das Wort "path" markiert ist. Meldung: Expected "," but found property.

Watt is datt?

Ich kann deinen Vorschlag also noch nicht mal eingeben.
 
Hallo,

Deine Anfrage:

"ASS-Projekt: relativer Pfad von scpt-Datei zu scpt-Datei"

;-)

Das funktioniert auch nicht im Skripteditor.
Die besagte Zeile gibst Du bei Deiner Skriptdatei in Xcode ein. Das wolltest Du doch...

Mit dem Editor kannst Du das nicht bauen.

Viele Grüße
 
Guten Morgen. :zeitung:

Das funktioniert auch nicht im Skripteditor.
Mit dem Editor kannst Du das nicht bauen.
Ok. Das ist dann wenigstens schon mal klar.

Sorry, wegen dem Misverständnis meiner Anfrage:
ASS Projekt: -> Ja, ich habe ein Applescript Studio Projekt
relativer Pfad von scpt-Datei zu scpt-Datei -> ich habe innnerhalb des ASS Projektes .scpt Dateien (mit der Endung *.scpt), die ich aus einer .scpt Datei heraus referenzieren will.

Jetzt klar?

.scpt Dateien -egal ob innerhalb ASS oder nicht- werden bei mir immer mit dem Skripteditor geöffnet und nicht mir dem ASS-eigenen Editor. Geht das anders?
Wenn ich von einer .applescript Datei aus .scpt Dateien aufrufen will, funktioniert das problemlos mit "resource path to main bundle" oder "(path to script "XY" extension "scpt")of main bundle"

Das habe ich aber eigentlich schon bei meinem ersten Beitrag so erklärt.
Dachte ich zumindest :kopfkratz:

Da dir Martins und meine Lösung mit "path to me", dem parent folder und dem Finder nicht gefällt, wie mache ich es besser? ;)

Grüße,
Clancy
 
Guten Morgen,

ich bin verwirrt :D ... zu gleich aber "schlauer" ;-)

ich habe innnerhalb des ASS Projektes .scpt Dateien (mit der Endung *.scpt), die ich aus einer .scpt Datei heraus referenzieren will

Das erklärt jetzt vieles.
Ich habe nochmals nachgelesen was Dich zu diesem Schritt bewegt hat. > Sonderzeichenproblem.

Ich biete Dir an:
Lass mir doch bitte mal das Projekt zukommen. Dann kann ich mir das ansehen, weil da etwas nicht stimmt. Die Daten behandle ich natürlich vertraulich und werden von mir dann sofort gelöscht.
Von den "scpt"-Dateien in einem ASS-Projekt solltest Du weggehen, denn da nimmst Du Dir einiges an Funktionsumfang.

Da dir Martins und meine Lösung mit "path to me", dem parent folder und dem Finder nicht gefällt, wie mache ich es besser?

"path to me" ist in Deinem Fall der einzige Weg (> bislang ;-)

Code:
-- Mutterordner holen
set mOrdner to (my holeMutterOrdner((path to me), true))

-- Mutterordner einer Datei oder Ordner
on holeMutterOrdner(pfad, alsString)
	if (alsString is true) then
		return (POSIX file ((POSIX path of pfad) & "/..")) as string
	else
		return (POSIX file ((POSIX path of pfad) & "/..")) as alias
	end if
end holeMutterOrdner

Ohne einmal den Finder zu bemühen...
Stelle Dir mal vor, Du arbeitest 20.000 Einträge ab, die immer den Mutterordner benötigen. Dann ist Dein Finder aber schön beschäftigt. Dann "blockierst" Dir alles.
Versuche immer so wenig wie möglich andere Apps für Deine Zwecke zu benutzen!

Viele Grüße
 
Danke für die Tipps.
Dein Handler funktioniert natürlich.

Ich kann hier natürlich keinen Download Link angeben.
Finde ich deine Email unter tune-instructor.de ?
 
Zurück
Oben Unten