Dies hängt mit dem Partitionsskript zusammen. Ich versuche, die ausgewählten und nicht ausgewählten Zeilen nach der Partitionsfunktion als unterschiedliche Tabellen zu speichern. Aber wenn ich das mache, gerät das gesamte JSL-Skript in eine Endlosschleife. Gibt es eine Möglichkeit, das zu lösen?
Danke für die Hilfe. Jetzt funktioniert es ordnungsgemäß. Ich habe den Zeilenstatus-Handler entfernt und eine Funktion verwendet, die beim Schließen des Fensters aufgerufen wird. Dadurch werden zwei Teilmengen erstellt.
Ich würde vermuten, dass es zu einer Endlosschleife kommt, weil Sie innerhalb des Zeilenstatus-Handlers eine neue Auswahl von Zeilen treffen (Zeilenauswahl umkehren). Sie könnten versuchen, die Auswahl von Zeilen zu vermeiden, indem Sie den Parameter verwenden A Sie haben bereits in der Funktion (sie sollte den Zeilen mitteilen, deren Status geändert wurden) eine 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 den Zeilenstatus-Handler vermeiden und eine Art neues Fenster verwenden, in dem der Benutzer eine Schaltfläche drücken kann, wenn die Auswahl getroffen wurde. Das liegt daran, dass ich einige Probleme mit Row State Handlern hatte und versuche, sie wann immer möglich zu vermeiden.