Ceci est lié au script de partition, j'essaie de sauvegarder les lignes sélectionnées et non sélectionnées sous différentes tables après la fonction de partition. Mais quand je fais cela, tout le script JSL entre dans une boucle infinie. Est-ce qu'il y a un moyen de résoudre ceci?
Merci pour l'aide. Maintenant, cela fonctionne correctement, j'ai supprimé le gestionnaire d'état de ligne et utilisé une fonction qui est appelée à la fermeture de la fenêtre. Cela crée la création de deux sous-ensembles.
Je suppose que cela entre dans une boucle infinie parce que vous effectuez une nouvelle sélection de lignes à l'intérieur du gestionnaire d'état de ligne (sélection de ligne inversée). Vous pouvez essayer d'éviter la sélection de lignes en utilisant le paramètre un vous avez déjà dans la fonction (elle devrait indiquer les lignes dont les états ont changé) avec une idée de ceci :
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);J'éviterais très probablement le gestionnaire d'état de ligne et utiliserais une sorte de nouvelle fenêtre dans laquelle l'utilisateur peut appuyer sur un bouton lorsque les sélections ont été effectuées. C'est parce que j'ai eu pas mal de problèmes avec les gestionnaires d'état de ligne et j'essaie de les éviter autant que possible.