これはパーティションスクリプトに関連しています。パーティション関数の後に、選択した行と選択されていない行を別のテーブルとして保存しようとしています。 しかし、これを実行すると、JSL スクリプト全体が無限ループに入ります。 これを解決する方法はありますか?
お手伝いありがとう。 現在は正常に動作しています。行状態ハンドラーを削除し、ウィンドウを閉じるときに呼び出される関数を使用しました。 これにより、2 つのサブセットが作成されます。
行状態ハンドラー内で行の新しい選択を行う(行の選択を反転する)ため、無限ループに陥ると思います。 パラメータを使用して行の選択を回避しようとすることもできますあるあなたはすでに関数内にこれについてのアイデアを持っています(状態が変更された行を通知する必要があります)。
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);おそらく行状態ハンドラーを避け、選択が完了したときにユーザーがボタンを押すことができる何らかの新しいウィンドウを使用するでしょう。 これは、行状態ハンドラーに関してかなりの問題が発生しており、可能な限りそれらを回避しようとしているためです。