confundido sobre JSL en forma de expresión<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Quiero almacenar una tabla pequeña en otra tabla para que un script que use ambas en el mismo informe pueda reconstruir la pequeña cuando sea necesario.Esta parece una buena solución porque los usuarios de la tabla también pueden abrir fácilmente esa pequeña tabla de información relacionada mientras solo almacenan una tabla de datos.
Conseguí que lo siguiente funcionara, después de mucho crujir de dientes sobre capas de sintaxis expr()....
dt = Abrir( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Abrir("$SAMPLE_DATA/Abrasion.jmp");
ts=dt<< Obtener secuencia de comandos();
Cerrar(dt,nosave);
ne=nombreexpr(ts);
eval(sustituto(expr(dt2<
//...más tarde...
dt2<
dtBigClass=actualdatatable();
Pero 2 preguntas...
1) ¿Es realmente tan complicado?Habiendo usado getscript() para obtener el script, ¿no hay una forma más sencilla de "poner" el script que obtuve en una tabla?
2) No estoy entusiasmado con el uso de currentdatatable() para que la variable dtBigClass apunte a la tabla después de ejecutar el script.Parece propenso a introducir algo incorrecto allí. Digamos que el script falla o hay algún problema de tiempo, todavía se está asignando alguna tabla u otra a dtBigClass.El script se parece a "New Table("Big Class... bla, bla" y realmente me gustaría ejecutar " dtBigClass=NewTable("Big Class...bla, bla..."Estaría muy contento con una solución en la que pueda "obtener" el script en forma de cadena de texto que pueda editar y ejecutar más. directamente .
Re: confundido sobre JSL en forma de expresión¡Gracias!
Aprecio ambas respuestas.Probablemente debería trabajar más duro para entender los basados en eval expr() pero tengo que admitir que El método de acceso es evaluar(parse()) una cadena de texto.Menos esfuerzo y además puedo ejecutar la parte de la cuerda y examinar lo que estoy construyendo directamente.Sin embargo, no pude encontrar la manera de ponerlo en una cuerda...
char(dt<
ts=dt<
y luego char(ts)...
...eso no funciona.
Asimismo, tu respuesta a 2 parece súper simple, ¡pero no se me ocurrió que funcionaría!Todavía estoy un poco sorprendido; no es obvio para mí que devolvería algo para poner en dtBigClass, pero es genial.
Re: confundido sobre JSL en forma de expresiónLa manipulación de expresiones puede resultar frustrante. No siempre es fácil saber si los argumentos de la función se evalúan en tiempo de ejecución o simplemente se aceptan tal como están escritos. Normalmente, al transferir expresiones a elementos de la GUI, como fórmulas de columnas o scripts de tablas, se requiere un esfuerzo adicional porque el argumento no se evalúa. A veces es más fácil construir una cadena y luego evaluar(parse()) que determinar el uso óptimo expr(), evalexpr(), etc.
1) Se puede simplificar un poco. Este ejemplo muestra dos formas de hacerlo.
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
dt2 = Abierto ( "$SAMPLE_DATA/Abrasión.jmp" ) ;
//1. Expresión
evaluar ( Evaluación Expr ( dt2 << nuevo guión ( "Gran Clase" , dtGranClase = Expr. ( dt << obtener guión )))) ;
//2. Cadena
evaluar ( Analizar gramaticalmente ( "dt2 << nuevoscript(\!"BigClass2\!", dtBigClass2 =" || Carbonizarse ( dt << obtener guión ) || ")" )) ;
Cerca ( dt , guardar ) ;
dt2 << ejecutar guión ( "Gran Clase" ) ;
dt2 << ejecutar guión ( "GranClase2" ) ;
2) Puede realizar la tarea dentro del guión como se muestra arriba o como se muestra a continuación.
dtGranClase = dt2 << ejecutar guión ( "Gran Clase" ) ;
Re: confundido sobre JSL en forma de expresión1: Casi así de complicado.NewScript espera que su argumento sea el guión, que suele ser la respuesta correcta. No esta vez.
2: Tampoco me gusta CurrentDatatable para este trabajo.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA/Abrasion.jmp" );
Eval( Eval Expr( dt2 << NewScript( "BigClass", bigclass = Expr( dt << getscript ) ) ) );
el sustituto es una forma, pero también puedes usar EvalExpr para evaluar solo el Expr.El resultado de EvalExpr es una expresión:

que aún debe ser evaluado.EvalExpr buscó Expr y lo evaluó, luego devolvió la expresión original con la sustitución realizada.Volviendo a la línea 3, hay una evaluación más realizada para ejecutar el comando NewScript (pero no la asignación a clase grande ).
Cuando se ejecuta el script llamado "BigClass", asigna la variable clase grande , evitando la necesidad de CurrentDatatable.