Creación de variables en tiempo de ejecuciónHola,
¿Hay alguna forma de crear variables en tiempo de ejecución (antes de ejecutar la aplicación no sé cuántas variables necesito y sus tipos)?
La solución en la que estoy trabajando:
1.El usuario elegirá alguna tabla de datos jmp / excel
2.El usuario elegirá las columnas que se utilizarán para filtrar la tabla (cantidad y nombres desconocidos)
3.La aplicación creará un cuadro de lista o un cuadro de radio para cada columna elegida y la llenará con valores distintos de esa columna
4. Después de que el usuario selecciona los valores para el filtrado, la aplicación ejecuta el filtrado y devuelve la tabla filtrada
Por lo tanto, tengo que crear variables en tiempo de ejecución para cada cuadro de lista con un nombre significativo si es posible.
Gracias,
Tom
Re: Creando variables en tiempo de ejecuciónJSL definitivamente le permitirá crear su propia versión del Filtro de datos, y podrá presentarla en la forma que considere más adecuada para su entorno. Le diré que todo el procesamiento de excepciones que tendrá que construir, hará que la tarea sea bastante compleja. A continuación se encuentra un script muy básico, que le dará un ejemplo de cómo crear variables en un entorno donde el usuario puede seleccionar la tabla y las columnas dentro de la tabla para procesar. Elegí usar la tabla de datos de muestra llamada "Big Class", pero cualquier tabla funcionaría con el código. Las listas creadas denominadas "nameList", "handleList" y CNTList guardan las columnas seleccionadas y el puntero a los cuadros de lista generados, y el último es el número que permitirá retirar toda la información cuando se elija una selección en uno de los cuadros de lista generados. Ahora, reconoceré claramente que esta es solo una de las posibles direcciones que se podrían usar para crear la pantalla que desee. También reiteraré que muchos códigos de excepción, que tratan con cosas como, eliminar una columna seleccionada para filtrar, cómo manejar filtros numéricos, son las selecciones para ser "Y" u "O" en sus comparaciones ... ... todos los artículos que necesitan ser tratados.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
Current Data Table( dt );
CNT = 0;
// Create lists to handle processing
nameList = {};
handleList = {};
CNTList = {};
// Create the new window
nw = New Window( "Example",
V List Box(
Text Box( "Data Table Columns" ),
Spacer Box( size( 0, 10 ) ),
clb = Col List Box(
dt << get name,
all,
max selected( 1 ),
Sel = clb << get selected;
If( N Items( Sel ) > 0,
CNT++;
Insert Into( nameList, Sel[1] );
Eval( Parse( "summarize(dt,bygp=by(:" || Char( Sel[1] ) || "))" ) );
lb = List Box( bygp, Eval( Parse( "SelectionChoice=" || Char( CNT ) || ";" ) ) );
Insert Into( handleList, lb );
Insert Into( CNTList, CNT );
HLB << append( lb );
);
),
HLB = H List Box()
)
);Re: Creando variables en tiempo de ejecuciónGracias jim
Me gustaría desarrollar mi propia GUI con Listboxes y Radioboxes, sin usar la opción Data Filter.
El usuario podrá controlar qué columnas usar para filtrar. Le permitiré administrar los nombres de las columnas dentro de "Propiedades del usuario" jsl.
Por ejemplo, desiredColumnsList = {"ColumnA", "ColumnD"} - será modificado por el usuario.
Luego, para cada columna que elija, crearé un cuadro de lista para filtrar.
¿Algunas sugerencias para eso?
Gracias de nuevo.
Tom
Re: Creando variables en tiempo de ejecuciónPuede usar el "Filtro de datos" incorporado para hacer lo que quiera, sin tener que escribir ningún código. Simplemente abra la tabla de datos deseada y luego vaya al menú desplegable
Filas ==> Filtro de datos
Entonces, cualquiera o todas las columnas pueden ser seleccionadas para ser filtradas.
Finalmente, cuando se seleccionan los filtros y se eligen sus valores, se puede crear la nueva tabla de datos de subconjuntos yendo al triángulo rojo y seleccionando "Mostrar subconjunto".
Esta acción también se puede escribir con el siguiente código:
Names Default To Here( 1 );
// Open the desired file
path=pick file();
dt=open(path);
// Get all of the columns in the data table
colList = dt << get column names();
// Build the code required to open a Data Filter
// That has all columns available for filtering
TheExpr =
"dt << Data Filter(
Location( {59, 59} ),
Auto clear( 0 ),
Mode( Show( 1 ), Include( 1 ) ),
Add Filter( columns(";
TheExpr = TheExpr || ":" || colList[1];
For( i = 2, i <= N Items( colList ), i++,
TheExpr = TheExpr || ", :" || colList[i]
);
TheExpr = TheExpr || ") ) );";
// Execute the code that was built
Eval( Parse( TheExpr ) );