Citas dentro de la expresión<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Supongamos que quiero concatenar una gran cantidad de tablas que tienen todas el mismo formato. Me gustaría tener una sola llamada para concatenar la función, en lugar de un bucle para concatenar una tabla de datos a la vez. Esto se debe a que quiero aprender expresiones en JMP.
me gustaria tener algo asi
Tabla de datos("dt1") << concatenar(tabla de datos("dt2"),tabla de datos("dt3"),…, tabla de datos("dt100"))
En este ejemplo, estoy creando copias de los mismos datos de muestra, pero imagine que podrían provenir de diferentes fuentes y contener diferentes valores.
cierra todo ( tablas de datos , no guardar ) ;
dt1 = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
norte = 100 ;
/*en este bucle, estoy copiando la tabla de datos y creando una cadena, con el objetivo de usarla en la función de concatenación*/
/*Estoy usando el carácter de escape porque tengo comillas dobles*/
cadena_dt = "" ;
por ( i = 2 , i <= norte , i ++,
dt_tmp = ( dt1 << subconjunto ( todas las filas , todas las columnas , invisible )) ;
nombre_dt = "dt" || carbonizarse ( i ) ;
dt_tmp << escoger un nombre ( nombre_dt ) ;
si ( cadena_dt == "" ,
cadena_dt = "tabla de datos(\!"" || nombre_dt || "\!")" ;,
dt_cadena = dt_cadena || ", tabla de datos(\!"" || nombre_dt || "\!")" ) ;
) ;
mostrar ( cadena_dt ) ;
concat_expr = expr ( dt1 << concatenar ( lista_dt )) ;
mostrar ( concat_expr ) ;
concat_expr2 = sustituto ( Nombreexpr ( concat_expr ) , expr ( lista_dt ) , cadena_dt ) ;
mostrar ( concat_expr2 ) ;
evaluar ( concat_expr2 ) ;
Y mi problema es que todavía tengo el carácter de escape en la expresión y su evaluación falla.
Por favor, ¿podría proponer un código para construir la expresión correcta?
Gracias por adelantado.
JF
Re: Comillas dentro de una expresiónPara ser claros, todo el código que ofrecí incluyendo 'Show(tbls)' fue solo una forma rápida de hacer una lista de tablas que puede alimentar para concatenar.
Pero si quieres hacer que las cosas sean invisibles, puedes hacer:
// Abre una tabla
dt1 = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
dt1script = dt1 << obtenerscript ;
Impresión ( dt1script ) ;
Insertar en ( dt1script , exp. ( Invisible )) ;
Impresión ( dt1script ) ;
que, casualmente, es un ejemplo simple de cómo puede manipular expresiones.
Re: Comillas dentro de una expresiónGracias a ambos por las respuestas. No sabía que podemos proporcionar listas para concatenar funciones.
La respuesta de MS fue exactamente lo que estaba buscando. yo estaba muy cerca
A continuación, organizo las dos opciones para comparar la eficacia de la cadena frente a la lista.
La opción de cadena tarda 2,85 s y la opción de lista 4,38 s.
Podemos acelerar el código haciendo invisible la tabla de datos. Con la función de subconjunto, puedo agregar fácilmente la opción invisible. Pero con el getscript, no sé cómo hacerlo.
dt1 = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
norte = 100;
empezar = Tiempo HP () ;
cadena_dt = "" ;
por ( i = 2 , i <= norte , i ++,
dt_tmp = ( dt1 << subconjunto ( todas las filas , todas las columnas )) ;
nombre_dt = "dt" || carbonizarse ( i ) ;
dt_tmp << escoger un nombre ( nombre_dt ) ;
si ( cadena_dt == "" ,
cadena_dt = "tabla de datos(\!"" || nombre_dt || "\!")" ;,
cadena_dt = cadena_dt || ", tabla de datos(\!"" || nombre_dt || "\!")" ) ;
) ;
mostrar ( cadena_dt ) ;
concat_expr = expr ( dt1 << concatenar ( lista_dt )) ;
mostrar ( concat_expr ) ;
concat_expr2 = sustituto ( Nombreexpr ( concat_expr ) , expr ( lista_dt ) , analizar gramaticalmente ( "{" || cadena_dt || "}" )) ;
mostrar ( concat_expr2 ) ;
evaluar ( concat_expr2 ) ;
Para ( i = 2 , i <= norte , i ++, Cerca ( tabla de datos ( "dt" || carbonizarse ( i )) , NoGuardar )) ;
final = Tiempo HP () ;
solucion1 = ( final - empezar ) / 1e6 ; /*tener segundos en lugar de microsegundos*/
empezar = Tiempo HP () ;
dt1script = dt1 << obtenerscript ;
tablas = {} ;
Para ( i = 2 , i <= norte , i ++,
evaluar ( dt1script ) ;
Insertar en ( tablas , Tabla de datos ( "Clase grande" || Carbonizarse ( i ))) ;
) ;
Espectáculo ( tablas ) ;
dt1 << Concatenar ( tablas ) ;
Para ( i = 1 , i <= Nartículos ( tablas ) , i ++, Cerca ( tablas [ i ] , NoGuardar )) ;
final = Tiempo HP () ;
solucion2 = ( final - empezar ) / 1e6 ; /*tener segundos en lugar de microsegundos*/
Re: Comillas dentro de una expresión(Por favor, evite publicar código como cierra todo ( tablas de datos , no guardar ) ; Fui descuidado y al principio no pude entender qué había pasado con todas mis ventanas abiertas)
Parece que obtienes una mezcla de expresiones y cadenas. En algún momento, la cadena debe analizarse en código ejecutable (preferiblemente una lista en este caso).
Su código debería funcionar bien si cambia el concat_expr2 asignación en esto:
concat_expr2 = sustituto ( Nombreexpr ( concat_expr ) , expr ( lista_dt ) , analizar gramaticalmente ( "{" || cadena_dt || "}" )) ;
Sin embargo, sugiero un enfoque más simple: omita la cadena y cree una lista directamente.
dt1 = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
norte = 10 ;
lista_dt = {} ;
Para ( i = 2 , i <= norte , i ++,
dt_tmp = dt1 << subconjunto ( todas las filas , todas las columnas , invisible ) ;
Insertar en ( lista_dt , dt_tmp ) ;
) ;
dt1 << concatenar ( lista_dt ) ;
Re: Comillas dentro de una expresiónDespués de haberlo leído dos veces, creo que su problema de 'concatenar' es solo un ejemplo que le permite profundizar en el uso de expresiones.
Sin embargo, si no es así, tenga en cuenta que '<< Concatenate()' tomará una lista de tablas, por lo que no tiene que meterse con ellas si simplemente quiere hacer el trabajo:
Nombres predeterminados a aquí ( 1 ) ;
// Abre una tabla
dt1 = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
dt1script = dt1 << obtenerscript ;
// Hacer algunas copias
norte = 4 ;
tablas = {} ;
Para ( i = 1 , i <= norte , i ++,
evaluar ( dt1script ) ;
Insertar en ( tablas , Tabla de datos ( "Clase grande" || Carbonizarse ( i + 1 ))) ;
) ;
Espectáculo ( tablas ) ;
// Concatenar las copias a la primera tabla - Puedes usar la lista de tablas, tbls
dt1 << Concatenar ( tablas , Anexar a la primera tabla ) ;
// Cerrar todas menos la primera tabla
Para ( i = 1 , i <= Nartículos ( tablas ) , i ++, Cerca ( tablas [ i ] , NoGuardar )) ; .