JSL Identifiziert den Pfad des aktuell ausgeführten SkriptsWenn ich ein Skript ausführe (entweder über das Skriptfenster oder durch Auslösen über das Add-In), möchte ich entweder (1) den Speicherort des Verzeichnisses abrufen können, in dem sich das Skriptfenster befindet, oder (2) das abrufen ID des Add-Ins, das das Skript enthält. JMP weiß das, weil es das Skript öffnen musste, um mit der Ausführung zu beginnen. Gibt es eine Möglichkeit, dies zu tun?
Ich weiß, dass ich dies in einem Add-In-Kontext tun kann, indem ich $ADDIN_HOME(id) verwende. Das Problem hierbei ist, dass ich ein gemeinsames Include habe, das ich in mehrere Add-Ins packe, und ich möchte die Datei lieber nicht für jedes andere Add-In ändern müssen. Ich kann mir vorstellen, dass ich versehentlich eine Kopie des allgemeinen Include von Add-In Nr. 1 zu Add-In Nr. 2 erstellt und dabei vergessen habe, die ID im Include zu ändern, damit es den richtigen Pfad in Add-In Nr. 2 verwendet.
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsEs gibt auch eine integrierte Funktion zum Übersetzen zwischen dem POSIX- und dem Windows-Pfadtrennzeichen:

Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsDanke Jeff, das ist großartig!
Ich habe jedoch eine andere Lösung gefunden: Ich habe mein Skript im selben Verzeichnis wie die aktuelle Datentabelle gespeichert und erhalte dann den Pfad meiner Datentabelle:
dt = Current Data Table();
path = dt<< getpath;
Der resultierende „Pfad“ ist mein Verzeichnispfad mit umgekehrten Schrägstrichen
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsIch mag Jeffs Lösung. Aber auch für diesen Zweck gibt es eine eigene Utility-Funktion. Hier ist ein Beispiel:
Convert File Path( "$HOME", Windows );
Es kann mehr als nur das Format von POSIX auf Windows ändern. Siehe Hilfe > Skriptindex > Funktionen > POSIX.
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsJMP und JSL kümmern sich nicht um die Ausrichtung der Schrägstriche. Sie werden so oder so funktionieren.
Wenn Sie die Pfadzeichenfolge außerhalb von JMP verwenden müssen, können Sie diese verwenden Ersetzen in():
foo="c:/my directory/my directory/my directory";
substitute into(foo, "/", "\");
show(foo);
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsDie Lösung funktioniert bei mir nicht, der resultierende Pfad ist mit Schrägstrichen /, ich brauche ihn mit Rückwärtsschrägstrich \. Kennt jemand eine Lösung?
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsDas Abrufen des Standardverzeichnisses in Kombination mit dem Auffinden der DEF-Datei hört sich an, als würde es funktionieren, scheint aber ein umständlicher Hack zu sein.Die Amortisation lohnt sich wahrscheinlich – ich habe eine Standard-Include-Datei für alle meine Dateipfaddefinitionen, aber mit separaten Revisionen für jedes Add-In (dh das gleiche Problem, das Sie beschreiben), daher wäre es äußerst nützlich, die ID des übergeordneten Add-Ins dynamisch ermitteln zu können Besonderheit.So sehr, dass der Hack langsam attraktiv klingt – ich hatte nicht daran gedacht, die DEF-Datei zu lesen ...
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsNormalerweise verwende ich entweder die Funktion „Standardverzeichnis abrufen“ oder die Funktion „Dateipfad konvertieren“ mit einer leeren Zeichenfolge, um den Pfad des aktuellen Skripts abzurufen.
path1 = Get Default Directory();
path2 = Convert File Path( "" );
Show( path1, path2 );
Hier ist das Protokoll, wenn ich dieses Skript aus einer Datei ausführe, die sich in meinem Ordner „C:\Public“ befindet:
path1 = "/C:/Public/";
path2 = "/C:/Public/";
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsWenn ich den Namen „com.cmpny.dept.addin1“ nicht bekomme und ich NICHT den allgemeinen Add-In-Ansatz verwende, den pmroz vorschlägt, reicht es aus, zu wissen, in welchem Ordner sich das Skript befand, da ich das Add-In öffnen kann .def aus demselben Ordner und extrahieren Sie die ID von dort.
Dies eröffnet mir tatsächlich eine zweite mögliche Anwendung. Wenn ich in die Datei „addin.def“ eines aktuell ausgeführten Add-Ins gelangen kann (aber im Moment scheint mir das nicht möglich zu sein), könnte ich eine Versionsprüfung durchführen, indem ich die ID und die „addinVersion“ von „addin.def“ erhalte und dann vergleiche das zu einer Liste der neuesten Add-In-Versionen, die ich mit Internet Open erhalten könnte. Ich könnte dann herausfinden, ob die lokale addinVersion des Benutzers die neueste und beste ist.
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsJa, aber ich möchte eine Zeile in General Functions.jsl einfügen, die angibt, welches andere Add-In eine Funktion in General Functions.jsl aufruft.
Mit anderen Worten: In com.cmpny.dept.addin1 könnte ein Skript eine Funktion in General Functions.jsl aufrufen. Ich möchte auf eine Variable in General Functions.jsl verweisen, die zeigt, dass com.cmpny.dept.addin1 sie aufgerufen hat.
Betreff: JSL identifiziert den Pfad des aktuell ausgeführten SkriptsWarum nicht die gemeinsame Include-Datei zu einem eigenen Add-In machen?Auf diese Weise können Sie es beispielsweise über Folgendes einbinden:
// Load functions common to various apps
include("$ADDIN_HOME(com.cmpny.dept.common)\General Functions.jsl");