Establecer el rol del mapa a través del scriptHola,
Estoy creando un script para ayudar a los principiantes a establecer algunos parámetros en una tabla de datos, como variables de tabla y roles de mapa.
El problema es que cuando configuro el rol del mapa, la ruta del archivo no se registra en las propiedades de la columna
path = pick file ();
dt0:my_column << set property ("Map Role", Map Role ("Shape Name Use" (path), "My_column") ) ) ;Alguna idea de que causa esto ?
Re: Establecer rol de mapa a través de scriptOk, después de jugar con esto por un tiempo, veo dónde está el problema:
las rutas de archivo en Windows se ven así: C: \ user \ file.txt
Cuando extrae una ruta en jmp usando el archivo pick (), la convierte a "C: /user/file.txt". Supongo que esto se debe a que JMP considera que '\' es un personaje especial. Lo extraño es que, en otras instrucciones JSL, puede usar la sintaxis JMP para las rutas de archivo, pero por alguna razón, Map Role usa la sintaxis normal de Windows.
Ahora mi pregunta es: ¿hay una manera simple de convertir una ruta de archivo JMP en una ruta de archivo de Windows? Algo que evitaría la necesidad de escribirlo así:
"C: \! \ User \! \ File.txt"
Alternativamente, también sería útil un script que pudiera acceder a las propiedades de la columna directamente y abrir la solicitud para seleccionar un archivo en el panel de roles del mapa.
Gracias
Re: Establecer rol de mapa a través de scriptOk, parece que encontré una solución para esto:
dt= open (pick file (), invisible ) ;
path = dt<< get path;
dt<<CLOSE></CLOSE>
Esto parece resolverlo
Re: Establecer rol de mapa a través de scriptAdemás, creo que el argumento con la ruta es un argumento con nombre, no una cadena, por lo que se ve así:
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use( path ), "My_column" ) ) ) ;
Por cierto, JMP utiliza el formato de ruta POSIX de forma predeterminada, no el formato de Windows. Pero generalmente se convertirá automáticamente o puede llamar explícitamente a la función incorporada para convertir entre los dos formatos.
Re: Establecer rol de mapa a través de scriptEsa ruta es un poco indirecta e innecesaria. Mira esto función .
Re: Establecer rol de mapa a través de scriptGracias @markbailey ,
Aprendí algo aquí. No sabía que era Posix:)
Buscando POSIX en el índice de secuencias de comandos, encontré la función de conversión:
path = pick file () ;
converted_path= Convert File Path (path, windows) ;
En comparación con el uso del mensaje << get path, esto ahorra la apertura de la tabla.
Re: Establecer rol de mapa a través de scriptEntonces, ¿puedo configurar esta propiedad desde una cadena de texto?
Dijiste que esto es "un argumento con nombre, no una cadena". Qué significa esto ? Supongo que esto es una desventaja de JSL, ya que el sistema es tan simple y flexible que los usuarios no saben la naturaleza exacta de lo que están manipulando.
Probé las siguientes sintaxis en vano:
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Eval( path) ), "My_column" ) );
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Expr( path) ), "My_column" ) );
Eval Expr (dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Expr( path) ), "My_column" ) ) );
Re: Establecer rol de mapa a través de scriptEs simple. Aquí hay ejemplos de diferentes argumentos.
Argumento literal, cadena numérica o de caracteres:
x = Sqrt( 5 );
x = Num( "5" );
Argumento variable:
x = 5;
y = Sqrt( x );
Argumento nombrado:
dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
El último ejemplo incluye argumentos con nombre (Y, X y Fit Line) y argumentos literales (: peso y: altura). Su código original incluía el argumento con nombre Use Shape () en delimitadores de cadena de caracteres, lo que lo convirtió en un argumento de cadena de caracteres.
Re: establecer rol de mapa vía scriptOk, finalmente mi guión funciona:)
Por alguna razón, cuando escribí:
dt0:my_column << set property ("Map Role", Map Role (Shape Name Use (path, "my_column" ) ) ;No transferiría la cadena contenida en la ruta de la variable a la propiedad de la columna. Todavía no funcionaría cuando intenté usar Eval (ruta) y otras soluciones. Supongo que JSL no admite la evaluación de variables dentro de este mensaje.
Así que aquí está la solución que encontré:
My_expression = Eval Expr ( dt0:my_column << set property ("Map Role", Map Role (Shape Name Use (Expr(path), "my_column" ) ) );
Eval (My_expression); ¡Y esto finalmente funciona!
El paso para convertir la ruta de posix a Windows no fue necesario al final, ya que la propiedad de la columna acepta ambos formatos.