¿Cómo mantener el formato y los comentarios con New Script ()?Hola a todos,
soy yo otravez. Otro día, otra pregunta 
Así que hice una buena secuencia de comandos larga que crea una nueva tabla de datos que contiene algunas secuencias de comandos. Uso la función New Script () para hacer esto.
dt<< New script ("myscript",
// comments
//beautiful indentation
(
(
( ( instructions) )
)
)
)
);
Mi problema es que cuando reviso el script Inside the table dt, se pierden todos los comentarios, así como el diseño, mi estilo personal de sangría, líneas vacías, etc.
Estos scripts están destinados a usuarios que no necesariamente están familiarizados con JSL, por lo que debo mantener los comentarios y el diseño original.
Estaba tratando de hacer algo como poner mis scripts en una cadena y usar Append() o Append Text() pero no tuve éxito.
mystring = " \[ // all my
// script
]\" ;
myscript = dt<<NEW script=""></NEW>Desafortunadamente esto no funcionó. Algunas ideas ? ¿Algunos trucos usando Expr/Eval, etc. tal vez?
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?¡Bien, bien, bien, parece que tenemos un ganador!
Me encanta cuando pasas días puliendo tus engranajes en un problema aparentemente imposible y luego alguien revela que la solución es un guión de una línea. :cara_con_lagrimas_de_alegria:
muchas gracias @xangregg 
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?JSL Quote () podría ayudar:
New Table( "formatted script",
New Script( "my script",
Eval( Parse(JSL Quote(
// example
x = 1;
Print( :column 1[1], y );
) )
)
),
New Column( "Column 1", Set Values( [5] ) )
)
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Usted dijo, " Por lo que puedo ver, no hay forma de referirse a un script dentro de una tabla de datos y ese es el problema. Lo que quiero decir es que no hay una tabla de datos: myscript o datatable< " Puede enviar este mensaje a la tabla de datos, después de ejecutar mi código de ejemplo anterior:
dt << Get Script( "My Script" );
Ahora puedo usar funciones de expresión o cadena de caracteres para editar el script desde la tabla de datos.
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Hola @Mark_Bailey ,
Gracias por este fragmento de código, es realmente útil.
Eso resuelve un punto: el contenido de una ventana de secuencia de comandos se puede guardar en una secuencia de comandos.
Pero, la primera parte todavía parece cierta "los scripts JMP no pueden ser editados por otro script". El script que proporcionó escribe un nuevo script cada vez con la función New Script ();
Por lo que puedo ver, no hay forma de referirse a un script dentro de una tabla de datos y ese es el problema. Lo que quiero decir es que no hay una tabla de datos: myscript o datatable<
todo lo que se puede hacer es copiar scripts y luego pegarlos en un nuevo script. Pero, de hecho, eso no resuelve el problema, ya que lo transforma en una expresión JSL, eliminando comentarios y formateando en el proceso.
Creo que es hora de admitir que actualmente no hay solución. Está en la lista de deseos de JMP, por lo que @Jeff_Perkinson mencionado,
todos los interesados por favor asegúrense de kudo Preservar-comentarios-y-espacios-en-blanco-en-código-JSL-adjunto-a-datos !!
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Las secuencias de comandos de la tabla podrían ejecutar las secuencias de comandos que se guardan de esta manera.
Include( "My Path/My Script.jsl" );
Puede colocar los scripts en cualquier lugar (p. ej., una sola carpeta de repositorio) e incluir la ruta completa.
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Usted dijo, " parece que los scripts JMP no pueden ser editados por otro script. Estaba tratando de escribir mi guión en un cuadro de guión dentro de una ventana.Pero por lo que puedo ver, el contenido de un cuadro de script no se puede guardar en una tabla de datos. "
Es posible. Puede que no sea obvio. Sin embargo, requiere técnicas de secuencias de comandos que no son básicas. Aquí hay un ejemplo para ilustrar cómo se podría hacer. Él
Names Default to Here( 1 );
script window = New Window( "Script", << Modal,
sb = Script Box( "print(\!"Hello\!");" ),
H List Box(
Button Box( "OK", s = sb << Get Lines ),
Button Box( "Cancel" )
)
);
If( script window["Button"] == -1,
Throw( "User cancelled" );
);
Print( s );
n = N Items( s );
script = s[1];
For( line = 2, line <= n, line++,
script ||= "\!n" || s[line];
);
Print( script );
Eval( Parse( script ) );
Eval(
Substitute(
Expr( Current Data Table() << New Script( "My Script", sss ) ),
Expr( sss ),
Parse( script )
)
);
Sin embargo, el script de la tabla pierde el formato porque la función Parse() lo descarta, al igual que el intérprete JSL. Así que este ejemplo no resuelve su problema original.
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Gracias markbailey,
esta es una pieza útil de código. Supongo que uno podría guardar los archivos .jsl en la misma carpeta que la tabla de datos con la que se usan. Esa sería una forma razonable de hacer las cosas.Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Nos encontramos con este problema en nuestros cursos de capacitación de JMP sobre secuencias de comandos. Impusimos un estilo y formato particular para que el código fuera lo más claro posible por lo que queríamos mantenerlo en todo momento. Nuestra solución fue aprovechar el diario JMP que se creó para cada curso. Agregamos un botón para cada script que proporcionamos en el curso. La secuencia de comandos del botón almacena la secuencia de comandos formateada como una cadena de caracteres en un archivo de secuencia de comandos y luego la abre o ejecuta. Aquí hay un ejemplo muy simple para ilustrar lo que hace el botón del diario:
script = "dt = Open( \!"$SAMPLE_DATA/Big Class.jmp\!" );
dist = dt << Distribution( Y( :weight, :height ) );";
Save Text File( "My Script.jsl", script );
Open( "My Script.jsl" );
Esta solución funciona bien para nuestro propósito en la capacitación. Aunque no creo que te ayude.
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Actualizar :
parece que los scripts JMP no pueden ser editados por otro script. Estaba tratando de escribir mi guión en un cuadro de guión dentro de una ventana.Pero por lo que puedo ver, el contenido de un cuadro de script no se puede guardar en una tabla de datos.
Parece que esto no es factible después de todo.
Sin embargo, hay un par de opciones de copia de seguridad a medio hornear:
- Al usar \[...]\, puedo guardar mi script en la tabla de datos como una cadena de texto. Los usuarios pueden ir y echar un vistazo para ver los comentarios. También podrían copiar y pegar esa cadena en un nuevo script y obtener el diseño y los comentarios originales. Sin embargo, no es tan bueno porque requiere alguna entrada del usuario.
- Otra opción alternativa sería crear una función de comentario en el script que imprima comentarios en el registro. Tampoco es una opción tan buena, ya que, de forma predeterminada, los scripts que se ejecutan desde una tabla de datos no tienen un registro incorporado.
- O simplemente podría tener mi código fuente disponible como recurso en un documento de Word o PDF.
¿Alguna otra idea, información?
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Gracias Jeff,
Tenía miedo de que esta fuera la respuesta. Sin embargo, creo que podría haber una solución de bricolaje para evitar esto...
Por ejemplo, intenté poner todo mi script en una declaración Expr () y se exportó bien. Por supuesto, en el guión final, todo sigue entre paréntesis de Expr.
¿Pero tal vez un script de edición de texto podría leer esto y eliminar Expr y los corchetes para tener el texto original?
así que mi pregunta es, ¿es esto posible? ¿Puede un script editar otro script de esta manera?
¿O tal vez podría tener los scripts de mi tabla de datos guardados como archivos .jsl separados y luego hacer que la tabla los importe automáticamente?
Vamos, debe haber una manera de hacer esto 
Re: ¿Cómo mantener el formato y los comentarios con New Script ()?Desafortunadamente, JMP no está diseñado para mantener los comentarios y el formato de los scripts adjuntos a la tabla de datos. Esto ha sido solicitado en la Lista de Deseos de JMP: Conservar comentarios y espacios en blanco en el código JSL . Asegúrese de kudo para indicar su apoyo. Me aseguraré de que los desarrolladores sean conscientes del deseo.