Ceci est lié au script de partition, j'essaie d'enregistrer les lignes sélectionnées et non sélectionnées en tant que tables différentes 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?
Je suppose qu'il entre en boucle infinie parce que vous effectuez une nouvelle sélection de lignes à l'intérieur du gestionnaire d'état de ligne (inversion de la sélection de ligne). Vous pouvez essayer d'éviter la sélection de lignes en utilisant le paramètre une 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 Row State Handlers et j'essaie de les éviter autant que possible.
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 fait la création de deux sous-ensembles.