Apilar múltiples parámetros con condición con JSLObtuve un conjunto de datos con múltiples parámetros con cierto formato "TestNumber;TestName". Sé que podemos hacerlo fácilmente manualmente. Pero
Quiero apilarlos todos con JSL de forma inteligente. ¿Cómo hacer esto en JSL? Por favor avise. Gracias
Re: Apilar múltiples parámetros con condición con JSLHola promz,
¡Gracias por excelentes consejos! ¡Funciona como un campeón!Re: Apilar múltiples parámetros con condición con JSLNecesitaba convertir los nombres de las columnas en una cadena.Además, one_col no es una lista.Aquí está el código corregido.te animo a
a) Leer los manuales de secuencias de comandos
b) Verifique el registro con frecuencia para detectar valores de variables, mensajes de error, etc.
c) Sigue usando este foro de discusión.
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous, string );
stackcols = {};
//one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
show(one_col, i);
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );Re: Apilar múltiples parámetros con condición con JSLGracias pmroz. Modifiqué el script de acuerdo con tu sugerencia, pero parece que me encuentro con un error.
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous );
stackcols = {};
one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );
/************************************
Error desconocido en la coincidencia de patrones en el acceso o evaluación de 'Regex' , Regex/*###*/(one_col, "(\d+);(\S+)")
Re: Apilar múltiples parámetros con condición con JSLcol_list = {"2010;PinShort@CLK", "2011;PinShort@IO", "2012;PinShort@VDD", "Label", "Data"};
stackcols = {};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
if (regex(one_col, "(\d+);(\S+)") == one_col,
insertinto(stackcols, one_col);
);
);
Re: Apilar múltiples parámetros con condición con JSLHola nelson,
Entiendo completamente. Y, sin embargo, mi problema es exactamente lo que mencionaste anteriormente, "cómo completar la lista stackCols" con mi condición con paramétrica con expresión regular "(\d+);(\S+)".
Gracias de cualquier manera. Intentaré hacer prueba y error yo mismo.Re: Apilar múltiples parámetros con condición con JSL@OneNorthJMP ,
Creo que lo que Ian te mostró es lo que estás pidiendo.Lo que Ian mostró es que lo que debe hacer es crear una lista (stackCols) en su JSL que contenga los nombres de las columnas que desea apilar y luego ejecutar el fragmento de código en la parte inferior de su script:
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
Entonces, el problema es que usted complete la lista stackCols.La forma de hacerlo depende exclusivamente de sus necesidades.Puede ser tan fácil como usar
stackCols = dt << get column names( continuous );
para completar la lista.O puede requerir una metodología más compleja.Pero lo que Ian mostró es lo simple que es ejecutar Stack Platform con cualquier dato que tenga actualmente en su tabla de datos.
Re: Apilar múltiples parámetros con condición con JSLHola, Ian,
Gracias por responder. Quizás mi explicación no sea clara. Quiero que el script JSL pueda adaptar diferentes parámetros de diferentes tablas de entrada.
Por ejemplo, ingrese la tabla 1, tengo 2 columnas. Tengo que modificar el JSL a continuación.
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Por ejemplo, ingrese la tabla 2, si tengo 3 columnas. Tengo que modificar el JSL a continuación.
Data Table( "FINAL.jmp" ) << Stack(
columns( :Name( "2010;PinShort@CLK" ), :Name( "2011;PinShort@IO" ), :Name( "2012;PinShort@VDD" ), ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Entonces, ¿qué pasa si tengo mil columnas? ¿Entonces tengo que ingresar esto manualmente uno por uno? ¿O hacer esto manualmente? Sí, por supuesto que puedo hacerlo manualmente. Pero ese no es mi objetivo, quiero tener un script que pueda leer la expresión regular para encontrar los parámetros de la pila "(\d+);(\S+)" sin importar cuál sea mi tabla de entrada.
Re: Apilar múltiples parámetros con condición con JSLLos detalles dependerán exactamente de lo que quiera decir cuando diga "mi tabla es dinámica" y de cuánta inteligencia necesite.
Pero, por ejemplo, al realizar algunos pequeños cambios en el código generado por JMP, podría tener;
NamesDefaultToHere(1);
sourceTable = DataTable("FINAL");
stackCols =
{
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
};
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
Los valores de 'sourceTable' y 'stackCols' se establecerían mediante una interfaz de usuario o algún script JSL más grande.
Re: Apilar múltiples parámetros con condición con JSLHola, Ian,
Esto ya lo sé. Las cosas en mi mesa son dinámicas. No quiero modificar mi script cada vez que tengo una tabla de datos diferente. Pero mi formato de datos paramétricos es fijo. Por lo tanto, debería haber una forma inteligente de codificar esto en JSL.Re: Apilar múltiples parámetros con condición con JSLSi puede, es una buena idea dejar que JMP haga el trabajo por usted. Generalmente, solo necesita hacer las cosas "a mano" una vez y luego usar el código que JMP genera automáticamente.
En su caso, si hace 'Tablas > Pila':

Al presionar "Aceptar", aparece una nueva tabla que tiene un script guardado llamado "Fuente". Si hace clic derecho en el icono verde 'ejecutar' asociado, puede seleccionar 'Editar', lo que le dará este script:
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Puede hacer que este script sea más inteligente, pero si simplemente agrega nuevas filas, funcionará bien (siempre que las columnas que necesita todavía estén en la tabla fuente).