Dies hängt mit dem Partitionsskript zusammen. Ich versuche, die ausgewählten und nicht ausgewählten Zeilen nach der Partitionsfunktion als verschiedene Tabellen zu speichern. Aber wenn ich das tue, geht das ganze JSL-Skript in eine Endlosschleife. Gibt es eine Möglichkeit, dies zu lösen?
Ich würde vermuten, dass es in eine Endlosschleife geht, weil Sie eine neue Auswahl von Zeilen innerhalb des Zeilenstatushandlers vornehmen (Zeilenauswahl invertieren). Sie können versuchen, die Auswahl von Zeilen zu vermeiden, indem Sie den Parameter verwenden ein Sie haben bereits in der Funktion (es sollte den Zeilen mitteilen, deren Status geändert wurde) mit einer Vorstellung davon:
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);Ich würde höchstwahrscheinlich Zeilenzustandshandler vermeiden und eine Art neues Fenster verwenden, in dem der Benutzer eine Schaltfläche drücken kann, wenn die Auswahl getroffen wurde. Dies liegt daran, dass ich einige Probleme mit Row State Handlern hatte und versuche, diese nach Möglichkeit zu vermeiden.
Danke für die Hilfe. Jetzt funktioniert es einwandfrei, ich habe den Zeilenstatushandler entfernt und eine Funktion verwendet, die beim Schließen des Fensters aufgerufen wird. Dadurch werden zwei Teilmengen erstellt.