Skripterstellung: Ermitteln des (absoluten) Pfads des Skripts selbst<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo JMP-Benutzer,
Ich schreibe ein Skript, das mehrere Dateien verwendet, die sich im selben Verzeichnis befinden sollten, wie die Skriptdatei. Im Moment greife ich mit dem Befehl „Aktuelles Verzeichnis abrufen“ auf diese Dateien zu. Leider funktioniert dies nur, wenn der Benutzer eine Instanz von JMP durch Doppelklick auf das Skript in seinem Explorer geöffnet hat.
Wenn JMP bereits läuft und der Benutzer das Skript über Datei -> Öffnen -> ... öffnet. Das aktuelle Verzeichnis ist der Pfad der JMP-Installation, nicht der Pfad der Skriptdatei.
Gibt es eine Möglichkeit, den Pfad der Skriptdatei herauszufinden, um dieses Problem zu lösen?
Danke,
Sebastian
Betreff: Skripterstellung: Den (absoluten) Pfad des Skripts selbst ermittelnIch bin mir nicht sicher, wie lange es diese Funktion schon gibt, da ich relativ neu bei JMP bin und diese Funktion gerade selbst gefunden habe, als ich versuchte, ein ähnliches Problem zu lösen, aber es scheint, dass die Funktion „Include File List()“ eine Liste von zurückgibt Öffnen Sie Dateien, die im Kontext des ausführenden Skripts stehen. (Übrigens ist die Beschreibung dieser Funktion nur einigermaßen informativ, wie es bei den meisten Funktionen/Methoden/Nachrichten im Scripting Index oder in Online-Ressourcen der Fall ist.)
Wenn diese Funktion am Anfang des Skripts ausgeführt wird, bevor etwas anderes vom Skript geöffnet wird, scheint es, dass der Skriptdateipfad und der Skriptdateiname daraus extrahiert werden können, da dies der einzige Pfad ist, der an dieser Stelle zurückgegeben wird.
Als ich es mit anderen in JMP geöffneten Dateien getestet und das Skript durch Doppelklick im Windows Explorer ausgeführt habe (wobei das Skript so eingestellt war, dass es beim Öffnen ausgeführt wird, ohne ein Skripteditorfenster zu öffnen, indem ich oben im Skript „//!“ eingefügt habe). ), bekomme ich nur den Pfad dieses Skripts zurückgegeben. Keine der anderen geöffneten Dateien wird zurückgegeben.
Betreff: Skripterstellung: Den (absoluten) Pfad des Skripts selbst ermittelnMit einer schlecht durchdachten Regex ... vielleicht ist sie gut genug ...
txt = runprogram(executable("net"), options({"use"}), readfunction("text"));
show(regex(txt,"U:[ \t]*([^ \t]*)","\1")); // find the "U:" drive
Der TXT-Wert sieht vor dem regulären Ausdruck so aus
"New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
U: \\network\root\u\chales Microsoft Windows Network
The command completed successfully.
"
Der reguläre Ausdruck erfasst dies
Regex(txt, "U:[ \t]*([^ \t]*)", "\1") = "\\network\root\u\chales";
Das zweite Argument für den regulären Ausdruck ist das Muster, was bedeutet
Finden Sie U:, gefolgt von null oder mehr Leerzeichen oder Tabulatoren, dann null oder mehr Zeichen, die keine Leerzeichen oder Tabulatoren sind. Das letzte Bit befindet sich in Klammern, die die Erfassungsgruppe \1 bilden. Dies ist auch das dritte Argument, das angibt, wie das Ergebnis des regulären Ausdrucks aussehen wird.
Betreff: Skripterstellung: Den (absoluten) Pfad des Skripts selbst ermitteln
@pmroz schrieb:
Dies könnte das tun, was Sie wollen:
Standardverzeichnis abrufen()
Normalerweise entferne ich das erste Zeichen, weil es ein Schrägstrich ist, etwa „/M:/myapplication/bigdata/“.
app_path = Substr(Get Default Directory(), 2, 999);
Diese Lösung schlägt im folgenden Fall fehl: Wenn Ihr Skript oder Ihre Anwendung über einen Hyperlink aus einem HTML-Dokument gestartet wird, gibt Get Default Directory() möglicherweise einen vom Webbrowser erstellten temporären Ordner zurück.
Betreff: Skripterstellung: Den (absoluten) Pfad des Skripts selbst ermittelnDanke Tom.Das ist eine großartige Idee!
Jetzt wünschte ich nur, dass „net use“ eine Windows-Umgebungsvariable wäre, dann würde ich einfach etwas verwenden wie: Get Environment Variable(„NETUSE“) (was natürlich nicht funktioniert).DJ
Betreff: Skripterstellung: Den (absoluten) Pfad des Skripts selbst ermittelnIn einem normalen SAS habe ich gerade die Ausgabe des Windows-Befehls (DOS) „net use“ analysiert, um das Volume zu finden, das einem bestimmten Laufwerksbuchstaben zugeordnet ist.
Betreff: Skripterstellung: Den (absoluten) Pfad des Skripts selbst ermitteln„Get Default Directory ()“ funktioniert hervorragend, außer wenn Benutzer ein Netzlaufwerk zuordnen (z. B. X:\meinNetzwerkpfad\test.jsl).Dann erhalten Sie den gekürzten Pfad und nicht den vollständigen Pfad (z. B. \\IhrNetzwerk.jmp.com\blahblah\MeinNetzwerkpfad\test.jsl).
Wenn jemand einen Weg kennt, dies zu umgehen, ist dies eine Möglichkeit, tatsächlich den vollständigen Pfad zu lesen, selbst wenn er kartiert ist, lassen Sie es mich wissen!Danke... DJ
Betreff: Skripterstellung: Den (absoluten) Pfad des Skripts selbst ermittelnDas ist es!
Danke!
Betreff: Skripterstellung: Den (absoluten) Pfad des Skripts selbst ermittelnDies könnte das tun, was Sie wollen:
Standardverzeichnis abrufen()
Normalerweise entferne ich das erste Zeichen, weil es ein Schrägstrich ist, etwa „/M:/myapplication/bigdata/“.
app_path = Substr(Get Default Directory(), 2, 999);