このウィッシュリストのリクエストのきっかけは何ですか?
データ テーブルを「クリーンアップ」するために、常に多かれ少なかれ複雑なスクリプトを作成します (テーブル スクリプト、テーブル変数、列プロパティなどを削除します)
どのような改善を望みますか?
データ テーブルをクリーンアップするための簡単なプラットフォームを提供します。これにより、テーブル スクリプト、テーブル変数、列プロパティ、行の状態、およびすべてのさまざまな変更を削除するオプションが提供されます。最適なケースでは、ユーザーが削除するものを決定できます。これらの一部は Subset に実装できますが、これも別のプラットフォームである必要があると思います。
このアイデアはなぜ重要なのでしょうか?
関連性のない情報を引き継ぐことなく、既存のデータ テーブルから新しいデータ テーブルを簡単に作成できるようになります。
興味深いアイデアですね@jthi 。今日はどうやってこれをやるんですか?
ケースに応じて、次のいずれかを行います。
- 手動で行う
- スクリプトを作成する(自動化の場合)
- 時々、クリーンアップを省略して、データテーブルが少し乱雑になってしまうことがありますが、テーブルを共有するまでは問題にはなりません。
私はおそらく、これらの特定の「メタデータ」クリーンアップ タスクを定期的に実行するため、それを実行するアドインを作成します (すでに作成を開始していますが、さまざまな不要な機能による「小さな」機能の増加に遭遇しました)。
願いが十分な称賛を得るまで、このスクリプトが役立つかもしれません。
現在のデータ テーブルのスクリプトを作成し、設定に応じて、スクリプト、列のプロパティ、add rows() 式を削除します。
Names Default To Here( 1 );
removeScripts = 1;
removeColumnProperties = 1;
remove rows = 1;
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << copy table script( "no data" );
tableScript = Eval( Eval Expr( Parse( Expr( Get Clipboard() ) ) ) );
tableScriptList = Substitute( Name Expr( tableScript ), Expr( New Table() ), Expr( List() ) );
If( removeScripts,
tableScriptList = Filter Each( {part}, tableScriptList, Not( Head( Part ) == Expr( New Script() ) ) )
);
tableScriptList = Transform Each( {part}, tableScriptList,
If(
Head( part ) == Expr( New Column() ) & removeColumnProperties,
Substitute( Name Expr( part ), Extract Expr( part, Set Property( Wild List() ) ), . ),
Head( part ) == Expr( Add Rows() ) & remove rows, .,
Name Expr( part )
)
);
newtableScript = Substitute( Name Expr( tableScriptList ), Expr( List() ), Expr( New Table() ) );
newtableScript;
それは理想からは程遠い。
Substitute は非常に危険です。ユーザーが置き換えたい表現を置き換えるだけでなく、一致する表現をすべて置き換えてしまいます。
たとえば、スクリプトの最後に残っているリストはすべて New Table() に置き換えられます。
テーブル スクリプト内のnew table()はすべてList()に置き換えられます [最後にNew table()が置き換えられます :]
JMP がそうしないようにする回避策をご存知ですか?
代理ヘッド?
この問題を念頭に置いて、私は次のような願いを書きました。
:folded_hands: 式のインデックス作成: 読み取りおよび書き込みアクセス
利用可能になったら、スクリプトを更新して、より堅牢なものにします。