Questo è correlato allo script di partizione, sto cercando di salvare le righe selezionate e non selezionate come tabelle diverse dopo la funzione di partizione. Ma quando lo faccio, l'intero script JSL entra in un ciclo infinito. C'è un modo per risolverlo?
Immagino che vada in loop infinito perché fai una nuova selezione di righe all'interno del gestore dello stato delle righe (inverti la selezione delle righe). Potresti provare a evitare la selezione delle righe usando il parametro un hai già nella funzione (dovrebbe dire alle righe che hanno cambiato gli stati) con qualche idea di questo:
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);Molto probabilmente eviterei il gestore dello stato di riga e utilizzerei una sorta di nuova finestra in cui l'utente può premere un pulsante quando le selezioni sono state eseguite. Questo perché ho avuto un bel po' di problemi con i gestori dello stato di riga e ho cercato di evitarli quando possibile.
Grazie per l'aiuto. Ora funziona correttamente, ho rimosso il gestore dello stato della riga e ho usato una funzione che viene chiamata alla chiusura della finestra. Questo fa la creazione di due sottoinsiemi.