Scripting : obtenir le chemin (absolu) du script lui-même<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour les utilisateurs de JMP,
j'écris un script qui utilise plusieurs fichiers qui doivent être situés dans le même répertoire, comme le fichier de script. Pour le moment, j'accède à ces fichiers en utilisant la commande "obtenir le répertoire actuel". Malheureusement cela ne fonctionne que si l'utilisateur a ouvert une instance de JMP en double-cliquant sur le script dans son explorateur.
Si JMP est déjà en cours d'exécution et que l'utilisateur ouvre le script via Fichier -> Ouvrir -> ... . Le répertoire actuel est le chemin d'installation de JMP et non le chemin du fichier de script.
Existe-t-il un moyen d'obtenir le chemin du fichier de script pour résoudre ce problème ?
Merci,
Sébastien
Re : Scripting : obtenir le chemin (absolu) du script lui-mêmeJe ne sais pas depuis combien de temps cette fonction existe, car je suis relativement nouveau dans JMP et je viens de trouver cette fonction moi-même en essayant de résoudre un problème similaire, mais il semble que la fonction "Inclure la liste des fichiers ()" renvoie une liste de ouvrir les fichiers qui se trouvent dans le contexte du script en cours d'exécution. (D'ailleurs, la description de cette fonction n'est qu'informative, comme c'est le cas pour la plupart des fonctions/méthodes/messages de l'index de scripts ou des ressources en ligne.)
Il semble que si cette fonction est exécutée en haut du script avant que quoi que ce soit d'autre ne soit ouvert par le script, le chemin du fichier de script et le nom du fichier de script peuvent en être extraits car c'est le seul chemin renvoyé à ce stade.
Lorsque je l'ai testé avec d'autres fichiers ouverts dans JMP et que j'ai exécuté le script en double-cliquant dessus depuis l'Explorateur Windows (avec le script configuré pour s'exécuter à l'ouverture sans ouvrir de fenêtre d'éditeur de script en incluant "//!" en haut du script ), je reçois uniquement le chemin de ce script. Aucun des autres fichiers ouverts n'est renvoyé.
Re : Scripting : obtenir le chemin (absolu) du script lui-mêmeAvec une regex mal pensée... c'est peut-être suffisant...
txt = runprogram(executable("net"), options({"use"}), readfunction("text"));
show(regex(txt,"U:[ \t]*([^ \t]*)","\1")); // find the "U:" drive
la valeur txt ressemble à ceci, avant l'expression régulière
"New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
U: \\network\root\u\chales Microsoft Windows Network
The command completed successfully.
"
l'expression régulière capture ceci
Regex(txt, "U:[ \t]*([^ \t]*)", "\1") = "\\network\root\u\chales";
Le deuxième argument de l'expression régulière est le modèle, ce qui signifie
recherchez U :, suivi de zéro ou plusieurs espaces ou tabulations, puis de zéro ou plusieurs caractères qui ne sont pas des espaces ou des tabulations. Ce dernier bit est entre parenthèses, qui forment le groupe de capture \1, qui est également le troisième argument qui spécifie quel sera le résultat de l'expression régulière.
Re : Scripting : obtenir le chemin (absolu) du script lui-même
@pmroz a écrit:
Cela pourrait faire ce que vous voulez :
obtenir le répertoire par défaut()
Je supprime généralement le premier caractère car il s'agit d'une barre oblique, quelque chose comme "/M:/myapplication/bigdata/"
app_path = Substr(Obtenir le répertoire par défaut(), 2, 999);
Cette solution échoue dans le cas suivant : si votre script ou application est lancé via un lien hypertexte depuis un document HTML, Get Default Directory() peut renvoyer un dossier temporaire créé par le navigateur Web.
Re : Scripting : obtenir le chemin (absolu) du script lui-mêmeMerci Tom.C'est une bonne idée!
Maintenant, je souhaite seulement que "net use" soit une variable d'environnement Windows, alors j'utiliserais simplement quelque chose comme : Get Environment Variable("NETUSE") (ce qui ne fonctionne pas bien sûr).DJ
Re : Scripting : obtenir le chemin (absolu) du script lui-mêmeDans SAS standard, je viens d'analyser la sortie de la commande Windows (DOS) "net use" pour trouver le volume mappé à une lettre de lecteur particulière.
Re : Scripting : obtenir le chemin (absolu) du script lui-mêmeGet Default Directory () fonctionne très bien... sauf lorsque les utilisateurs mappent un lecteur réseau (par exemple X:\mynetworkpath\test.jsl).Ensuite, vous obtenez le chemin tronqué et non le chemin complet (par exemple \\yournetwork.jmp.com\blahblah\mynetworkpath\test.jsl).
Si quelqu'un connaît un moyen de contourner ce problème, c'est un moyen de lire le chemin complet même s'il est cartographié, faites-le-moi savoir !merci.. dj
Re : Scripting : obtenir le chemin (absolu) du script lui-mêmeC'est ça!
Merci!
Re : Scripting : obtenir le chemin (absolu) du script lui-mêmeCela pourrait faire ce que vous voulez :
obtenir le répertoire par défaut()
Je supprime généralement le premier caractère car il s'agit d'une barre oblique, quelque chose comme "/M:/myapplication/bigdata/"
app_path = Substr(Obtenir le répertoire par défaut(), 2, 999);