すべてのデータテーブルを閉じますが、さらなる分析のために 1 つは開いたままにしますこんにちは、みんな
これは投稿の続きです:
https://community.jmp.com/t5/Discussions/JSL-How-to-close-data-tables-after-analysis/mp/36739
しかし、JSL デバッガの実行中にスクリプトでエラーが発生しました。
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);dt4 を除くすべてのテーブルを閉じるため、スクリプトは正常に実行されますが、If ステートメントの下に添付されたファイルに示されているようにエラーが発生します。 これが何を指しているのかわかる人はいますか?
スクリプトは正常に実行され、dt4 を除くすべてのテーブルが閉じられますが、この時点以降にスクリプトを拡張するときに問題が発生します。 この時点で dt4 テーブルに対してグラフ ビルダー スクリプトを起動する必要がありますが、何も行われません。 ここでのこのエラーにより、スクリプトが次の手順に進むのを停止しているのではないかと思います。
Re: すべてのデータテーブルを閉じますが、さらなる分析のために 1 つは開いたままにしますそれはあなたが 0 以上だからです。データテーブル0がありません
>= 1 または >0 にする
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 1, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);Re: すべてのデータテーブルを閉じますが、さらなる分析のために 1 つは開いたままにしますアドバイスありがとうございます。 アプローチを変更し、スクリプトの早い段階でデータ テーブルを閉じるようにしました。 実際、スクリプトはより高速になりました。 ありがとう
Re: すべてのデータテーブルを閉じますが、さらなる分析のために 1 つは開いたままにしますフィル 私も同じことを考えていました。テーブル名は重複できないことに注意してください。そのため、「dt4」という名前の新しいテーブルを作成しようとしたときに、すでに「dt4」テーブルが存在する場合、JMP はそのテーブルに「dt4 2」という名前を付けます。テーブル名は期待どおりではない可能性が高く、これが、上記のコードが当面の問題を解決する方法としては不十分だと私が感じるもう 1 つの理由です。
元の投稿にリンクされている投稿を見ました。Uday のコードは、より本番環境に対応したものになっています。残念ながら、OP は txnelson の単純化を使用していますが、これは単なる単純化であり、彼がすべての問題を抱えている場所です。
Re: すべてのデータテーブルを閉じますが、さらなる分析のために 1 つは開いたままにします「dt4」はテーブルの実際の名前ですか?スクリプト内のテーブルに定義した変数名である可能性が高いように思えます。 あなたのスクリプトはテーブル名、つまりJMPテーブルの一番上に表示されるもの、例えば「Big Class」を探していると思います。
これは、スクリプトで使用される Get Name() 関数の簡単な例 (スクリプト インデックスから) です。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Name();
Show( n );
ところで、これがあなたの問題の原因であるという考えは間違っている可能性があります。
Re: すべてのデータテーブルを閉じますが、さらなる分析のために 1 つは開いたままにしますテーブルはリンク テーブルである可能性があります。 以下の例を参照してください。それか、スクリプトにエラーがあり、誤って間違ったテーブルを参照している可能性があります。これは、テーブルを名前で検索しているためと考えられます。
Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = dt1 << Summary(
Group( :height ),
Freq( "None" ),
Weight( "None" )
);
close(dt1, "nosave"); //closes both dt1 and dt2 since dt2 is dependant on dt1
いずれにせよ、上記のコードはテーブルを閉じる処理を処理する方法としては適切ではありません。まず、スクリプトに関係のないテーブルを閉じることになるため、作業していた他の作業が閉じられたことにユーザーが怒る可能性があります。次に、必要のないテーブルを最後まで閉じるまで放置することは、メモリの使用効率が悪くなります。スクリプトが終了するまで待つのではなく、使用後すぐにテーブルを閉じる方が良い習慣/パターンです。スクリプト全体にテーブルが必要な場合は、リストでテーブルを追跡し、スクリプトに関連するテーブルのみを閉じることをお勧めします。
Re: すべてのデータテーブルを閉じますが、さらなる分析のために 1 つは開いたままにしますこんにちは、ウダイさん
これを変更しましたが、JSL デバッガーで同じエラーが発生します。
Re: すべてのデータテーブルを閉じますが、さらなる分析のために 1 つは開いたままにします@ivomdb 、
このエラーは通常、JMP が存在を認識していないデータ テーブルを参照している場合、またはテーブルにアクセスするための参照がない場合に発生します。 これは主に、データ テーブル参照が失われた場合、または参照される前に閉じられた場合に発生します。
この問題に対処する 1 つの方法は、次のことを行うことです。
また、テーブルが途中で閉じられていないことを確認する必要もあります。
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
Current Data Table(Data Table(i)); // This should make the data table you are working with active and current
If( Contains( DontClose, Data Table( i ) << get name ),
Continue();
,
// else
Close( Data Table( i ), "No Save" );
)
);<BR />