Scripting: ottenere il percorso (assoluto) dello script stesso<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao utenti JMP,
sto scrivendo uno script che utilizza diversi file che dovrebbero trovarsi nella stessa directory, come il file di script. Al momento sto accedendo a questi file utilizzando il comando "ottieni directory corrente". Purtroppo questo funziona solo se l'utente ha aperto un'istanza di JMP facendo doppio clic sullo script nel suo esploratore.
Se JMP è già in esecuzione e l'utente apre lo script tramite File -> Apri -> ... . La directory corrente è il percorso dell'installazione JMP e non il percorso del file di script.
C'è un modo per ottenere il percorso dello scriptfile per risolvere questo problema?
Grazie,
Sebastian
Ri: Scripting: ottenere il percorso (assoluto) dello script stessoNon sono sicuro da quanto tempo esista questa funzione, dato che sono abbastanza nuovo in JMP e l'ho appena trovata io stesso mentre cercavo di risolvere un problema simile, ma sembra che la funzione "Includi elenco file()" restituisca un elenco di aprire i file che si trovano nel contesto dello script in esecuzione. (A proposito, la descrizione di questa funzione è solo in qualche modo informativa, come nel caso della maggior parte delle funzioni/metodi/messaggi nello Scripting Index o nelle risorse online.)
Sembra che se questa funzione viene eseguita nella parte superiore dello script prima che qualsiasi altra cosa venga aperta dallo script, il percorso del file di script e il nome del file di script possono essere estratti da quello poiché questo è l'unico percorso restituito a quel punto.
Quando l'ho provato con altri file aperti in JMP ed ho eseguito lo script facendo doppio clic su di esso da Esplora risorse (con lo script impostato per essere eseguito all'apertura senza aprire una finestra dell'editor di script includendo "//!" nella parte superiore dello script ), ottengo restituito solo il percorso di quello script. Nessuno degli altri file aperti viene restituito.
Ri: Scripting: ottenere il percorso (assoluto) dello script stessoCon una regex mal pensata...forse è abbastanza buona...
txt = runprogram(executable("net"), options({"use"}), readfunction("text"));
show(regex(txt,"U:[ \t]*([^ \t]*)","\1")); // find the "U:" drive
il valore txt è simile a questo, prima della regex
"New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
U: \\network\root\u\chales Microsoft Windows Network
The command completed successfully.
"
la regex lo cattura
Regex(txt, "U:[ \t]*([^ \t]*)", "\1") = "\\network\root\u\chales";
Il secondo argomento della regex è il modello, il che significa
find U:, seguito da zero o più spazi o tabulazioni, quindi zero o più caratteri che non siano spazi o tabulazioni. L'ultimo bit è tra parentesi, che formano il gruppo di cattura \1, che è anche il terzo argomento che specifica quale sarà il risultato della regex.
Ri: Scripting: ottenere il percorso (assoluto) dello script stesso
@pmroz ha scritto:
Questo potrebbe fare quello che vuoi:
ottieni la directory predefinita()
Di solito tolgo il primo carattere perché è una barra, qualcosa come "/M:/myapplication/bigdata/"
percorso_app = Substr(Ottieni directory predefinita(), 2, 999);
Questa soluzione fallisce nel seguente caso: se lo script o l'applicazione viene avviata tramite collegamento ipertestuale da un documento HTML, Get Default Directory() potrebbe restituire una cartella temporanea creata dal browser web.
Ri: Scripting: ottenere il percorso (assoluto) dello script stessoGrazie Tom.Questa è una grande idea!
Ora vorrei solo che "net use" fosse una variabile ambientale di Windows, quindi userei semplicemente qualcosa come: Get Environment Variable ("NETUSE") (che ovviamente non funziona).DJ
Ri: Scripting: ottenere il percorso (assoluto) dello script stessoNel SAS normale ho appena analizzato l'output del comando Windows (DOS) "net use" per trovare il volume mappato su una particolare lettera di unità.
Ri: Scripting: ottenere il percorso (assoluto) dello script stessoGet Default Directory () funziona alla grande...tranne quando gli utenti mappano un'unità di rete (ad esempio X:\mynetworkpath\test.jsl).Quindi ottieni il percorso troncato e non il percorso completo (ad esempio \\yournetwork.jmp.com\blahblah\mynetworkpath\test.jsl).
Se qualcuno conosce un modo per aggirare questo problema, ovvero un modo per leggere effettivamente il percorso completo anche se mappato, fatemelo sapere!grazie... dj
Ri: Scripting: ottenere il percorso (assoluto) dello script stessoQuesto è tutto!
Grazie!
Ri: Scripting: ottenere il percorso (assoluto) dello script stessoQuesto potrebbe fare quello che vuoi:
ottieni la directory predefinita()
Di solito tolgo il primo carattere perché è una barra, qualcosa come "/M:/myapplication/bigdata/"
percorso_app = Substr(Ottieni directory predefinita(), 2, 999);