Secuencias de comandos: obtener la ruta (absoluta) del script en sí<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola usuarios de JMP,
Estoy escribiendo un script que utiliza varios archivos que deberían estar ubicados en el mismo directorio, como el archivo del script. En este momento estoy accediendo a estos archivos usando el comando "obtener directorio actual". Lamentablemente, esto sólo funciona si el usuario abrió una instancia de JMP haciendo doble clic en el script en su explorador.
Si JMP ya se está ejecutando y el usuario abre el script a través de Archivo -> Abrir -> .... El directorio actual es la ruta de instalación de JMP, no la ruta del archivo de script.
¿Hay alguna manera de obtener la ruta del archivo de script para resolver este problema?
Gracias,
Sebastián
Re: Scripting: Obtener la ruta (absoluta) del propio scriptNo estoy seguro de cuánto tiempo ha existido esta función, ya que soy bastante nuevo en JMP y acabo de encontrar esta función mientras intentaba resolver un problema similar, pero parece que la función "Incluir lista de archivos()" devuelve una lista de abra archivos que estén en el contexto del script en ejecución. (Por cierto, la descripción de esta función es sólo informativa, como es el caso de la mayoría de funciones/métodos/mensajes en el Índice de secuencias de comandos o recursos en línea).
Parece que si esta función se ejecuta en la parte superior del script antes de que el script abra cualquier otra cosa, la ruta del archivo del script y el nombre del archivo del script se pueden extraer de allí, ya que esta es la única ruta devuelta en ese punto.
Cuando lo probé con otros archivos abiertos en JMP y ejecuté el script haciendo doble clic en él desde el Explorador de Windows (con el script configurado para ejecutarse abierto sin abrir una ventana del editor de scripts al incluir "//!" en la parte superior del script ), solo obtengo la ruta de ese script. Ninguno de los otros archivos abiertos se devuelve.
Re: Scripting: Obtener la ruta (absoluta) del propio scriptCon una expresión regular mal pensada... tal vez sea lo suficientemente buena...
txt = runprogram(executable("net"), options({"use"}), readfunction("text"));
show(regex(txt,"U:[ \t]*([^ \t]*)","\1")); // find the "U:" drive
el valor de texto se ve así, antes de la expresión regular
"New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
U: \\network\root\u\chales Microsoft Windows Network
The command completed successfully.
"
la expresión regular captura esto
Regex(txt, "U:[ \t]*([^ \t]*)", "\1") = "\\network\root\u\chales";
El segundo argumento de la expresión regular es el patrón, lo que significa
busque U:, seguido de cero o más espacios en blanco o tabulaciones, luego cero o más caracteres que no sean espacios en blanco ni tabulaciones. Ese último bit está entre los pares, que forman el grupo de captura \1, que también es el tercer argumento que especifica cuál será el resultado de la expresión regular.
Re: Scripting: Obtener la ruta (absoluta) del propio script
@pmroz escribió:
Esto podría hacer lo que quieras:
obtener directorio predeterminado()
Normalmente quito el primer carácter porque es una barra diagonal, algo así como "/M:/myapplication/bigdata/"
app_path = Substr(Obtener directorio predeterminado(), 2, 999);
Esta solución falla en el siguiente caso: si su secuencia de comandos o aplicación se inicia mediante un hipervínculo desde un documento HTML, Get Default Directory() puede devolver una carpeta temporal creada por el navegador web.
Re: Scripting: Obtener la ruta (absoluta) del propio scriptGracias Tom.¡Es una gran idea!
Ahora sólo desearía que el "uso de red" fuera una variable ambiental de Windows, entonces simplemente usaría algo como: Obtener variable de entorno ("NETUSE") (que no funciona, por supuesto).DJ
Re: Scripting: Obtener la ruta (absoluta) del propio scriptEn SAS normal, acabo de analizar la salida del comando "net use" de Windows (DOS) para encontrar el volumen asignado a una letra de unidad en particular.
Re: Scripting: Obtener la ruta (absoluta) del propio scriptObtener directorio predeterminado () funciona muy bien... excepto cuando los usuarios asignan una unidad de red (por ejemplo, X:\mynetworkpath\test.jsl).Luego obtendrá la ruta truncada y no la ruta completa (por ejemplo, \\yournetwork.jmp.com\blahblah\mynetworkpath\test.jsl).
Si alguien conoce una forma de solucionar esto, que sea una forma de leer la ruta completa incluso si está asignada, ¡hágamelo saber!gracias.. dj
Re: Scripting: Obtener la ruta (absoluta) del propio script¡Eso es todo!
¡Gracias!
Re: Scripting: Obtener la ruta (absoluta) del propio scriptEsto podría hacer lo que quieras:
obtener directorio predeterminado()
Normalmente elimino el primer carácter porque es una barra diagonal, algo así como "/M:/myapplication/bigdata/"
app_path = Substr(Obtener directorio predeterminado(), 2, 999);