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