テーブルに正しく名前を付けるにはどうすればよいですか?全て、
テーブルに名前を設定する方法は知っています。 ただし、場合によっては、その名前が既に存在する場合 (偶然、または前回のスクリプト実行後の左から)、名前は「My Table」ではなく「My Table 2」に設定されます。 希望どおりに正確に設定するにはどうすればよいですか?
これを行うコードのスニペットを探しています。この名前のテーブルが存在するかどうかを確認し、存在する場合は、古いテーブルを閉じるか名前を変更し、これに私が要求した正確な名前を付けます。
Try() 関数を試してみましたが、おそらくそれがどのように機能するのか完全には理解していません。 すべてのテーブルのリストを取得し、名前などを反復処理する複雑な if() ステートメントをいくつか試しました。長すぎて、多数のテーブルでは速度が大幅に低下します。
それで、私は疑問に思ったのですが、テーブルにそのとおりの名前が付けられていることを確認できる、テーブルに名前を付けるための、従来の正しい方法は何でしょうか?
Re: テーブルに正しく名前を付けるにはどうすればよいですか?私が考えるこのアプローチの唯一の問題は...そうですね、基本的に、代わりに新しい関数を書くことで Set Name をより安全に使用しようとしているということです。 しかし、その関数では Set Name を再度使用することになり、解決しようとしているのと同じ問題が発生する傾向があります...
ただし、直接のテーブル、つまりスクリプト自体にとっては問題ではないため、ここでは問題ありません。
この時点では、おそらく古いテーブルを保存せずに閉じるだけでしょう。Re: テーブルに正しく名前を付けるにはどうすればよいですか?はい、そうやってアプローチしてみました。 Try() がどのように機能するかはおそらく完全には理解していません。 あなたのやり方を試してみます。Re: テーブルに正しく名前を付けるにはどうすればよいですか?前述したように、開いているすべてのテーブルのリストを取得することは避けたいと考えています。 1 つのスクリプトの実行で何百ものサマリー テーブルを生成すると、非常に時間がかかります。Re: テーブルに正しく名前を付けるにはどうすればよいですか?さまざまなコミュニティ メンバーがこの問題に取り組むさまざまな方法を持っていると思います。ここでは、非常にシンプルなアプローチと思われる方法を示します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
xt = dt << subset( selected rows( 0 ), selected columns( 0 ) );
setName = Function( {tdt, Name},
{tdt, Name},
Try( Data Table( Name ) << set name( Name || "_Old" ) );
tdt << set name( name );
);
setName( xt, "big class" );Re: テーブルに正しく名前を付けるにはどうすればよいですか?私は従来の方法を知りません(すでに使用されている名前を避けること以外)。 稼働時間が長くなると、開いているすべてのウィンドウを追跡するのが困難になる可能性があることに同意します。
これは、説明したことを実行するための JSL アイデアの 1 つです (JMP 14 でテスト済み)。 かなり効率が良さそうです。 常にグローバルに使用できるようにするには、JMP が起動されるたびに自動的に実行される起動スクリプトによって、関数をカスタム function() として追加できます。
// Function for renaming data table if desired name is used by another open table
rename_if_exists = Function({s},
open_tables = Get Window List(Type("data tables")) << Get Window Title();
exists = Loc(open_tables, s)[1];
If(exists,
Data Table(open_tables[exists]) << set name(open_tables[exists] || "_old")
);
s;
);
// Apply...
dt = New Table(rename_if_exists("untitled 28972"), add rows(10));