Esto está relacionado con el script de partición. Estoy intentando guardar las filas seleccionadas y no seleccionadas como tablas diferentes después de la función de partición. Pero cuando hago eso, todo el script JSL entra en un bucle infinito. ¿Hay alguna forma de resolver esto?
Gracias por la ayuda. Ahora está funcionando correctamente, eliminé el controlador de estado de fila y usé una función que se llama al cerrar la ventana. Esto crea dos subconjuntos.
Supongo que entra en un bucle infinito porque realiza una nueva selección de filas dentro del controlador de estado de fila (selección de fila invertida). Podría intentar evitar la selección de filas utilizando el parámetro a ya tienes en la función (debe indicar las filas en las que se cambiaron los estados) con una idea de esto:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/big class.jmp");
tableCount = 0;
theRows = [];
filepath = "$Desktop";
f = Function({a},
// Set dupRows to the previously selected rows
dupRows = theRows;
// Get the current selected rows
theRows = a;
If(N Rows(theRows) > 0,
// check to see if there are the same number of rows
// then validate the rows are different rows before saving
If(N Rows(theRows) == N Rows(dupRows),
If(Sum(dupRows == theRows) != N Rows(theRows),
tableCount++;
dtTemp = dt << subset(invisible, rows(theRows), selected columns(0));
dtSEG = dt << subset(rows(dupRows), selected columns(0));
Close(dtTemp, save(filepath || "\" || "part" || ".jmp"));
Close(dtSEG, save(filepath || "\" || "seg2" || ".jmp"));
)
,
// If not the same number of selected rows, save the subset
tableCount++;
dtTemp = dt << subset(invisible, rows(theRows), selected columns(0));
dtSEG = dt << subset(rows(dupRows), selected columns(0));
Close(dtTemp, save(filepath || "\" || "part" || Char(tableCount) || ".jmp"));
Close(dtSEG, save(filepath || "\" || "seg2" || Char(tableCount) || ".jmp"));
)
);
Show(a, tableCount); //debug print
);
rs = Current Data Table() << make row state handler(f);Lo más probable es que evite el controlador de estado de fila y use algún tipo de ventana nueva en la que el usuario pueda presionar un botón cuando se hayan realizado las selecciones. Esto se debe a que he tenido bastantes problemas con Row State Handlers y trato de evitarlos siempre que sea posible.