こんにちは!
当該テーブルの On Close ステートメント内でテーブルへの参照を取得するには、助けが必要です。
簡単なスクリプトがあります。データ テーブルを開く「開く」ボタンと、テーブルのリストを含むコンボ ボックスのある GUI です。
また、テーブル名をキー、テーブル参照を値として連想配列でテーブルを追跡します。
このスクリプトでは、維持しなければならない古い名前空間がいくつかあります。コンボボックスからテーブルを削除するために、OnCloseステートメントでEval(Eval Expr(Expr()))というトリックを使用しています。しかし、このトリックは連想配列からテーブルを削除する場合には機能しません。
Function({this}, _dt = ((this << Child) << Get Data Table)) にはもう一つトリックがあります。データテーブルへの参照を取得する際には正常に動作しますが、Eval(Eval Expr(Expr()))) 内に配置すると動作しなくなります。
I tried to get the reference to the table separately, but looks like I don't know how Function({this}, ) works. How do I assign a result of this function to a variable?&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Anyways, here's the latest iteration of my script, please help me tweak it to make it work.&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Eventually, I will need to handle data table manual name changes somehow and reflect it in the combo box.&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;PRE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;CODE class=" language-jsl"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Names Default To Here( 1 );
data = New Namespace(
"DataTables"
);
gui = New Namespace(
"GUI"
);
data:tablesListAA = [=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; ];
gui:guiWindow = Expr(
Border Box( Left( 10 ), Right( 10 ), Top( 10 ), Bottom( 10 ), Sides( 15 ),
V List Box(
gui:cb = Combo Box(
{},
selection = gui:cb &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; GetSelected();
Print( "Selected: " || selection );
Current Data Table( data:tablesListAA[selection] );
Print( "Current Data Table: " || (Current Data Table() &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name) );
),
Button Box( "Add Table",
filePath = Pick File(
"Select JMP File",
"$SAMPLE_DATA",
{"JMP Files|jmp;jsl;jrn", "All Files|*"},
1,
0,
"newJmpFile.jmp"
);
dt = Open( filePath );
Eval(
Eval Expr(
dt &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; On Close(
getTable = Function( {this},
_table = ((this &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Child) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Data Table);
Return(_table);
);
_table = getTable(this);
Local( {data = Namespace( Expr( data &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name ) ), gui = Namespace( Expr( gui &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name ) ), _table = Expr(_table)},
Try(
_tableName = _table &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name;
Print("Trying to remove: "||_tableName);
Remove From( data:tablesListAA, _tableName );
gui:cb &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Set Items( data:tablesListAA &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Keys );
)
)
)
)
);
dtName = dt &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name();
Insert Into( data:tablesListAA, dtName, dt );
gui:cb &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Set Items( data:tablesListAA &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Keys );
)
)
)
);
nw = New Window( "Test table selection", gui:guiWindow );
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/CODE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/PRE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-body&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-labs id="lingo-labs-918808" slang="en-US" mode="CREATE"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Automation and Scripting&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-labs&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
通常は、テーブル名/参照をOn Closeで評価するだけです。< これはデータ テーブルウィンドウへの参照になります (スクリプト インデックスにこの例があります)。
もっと見る...
Names Default To Here(1);
data = New Namespace(
"DataTables"
);
gui = New Namespace(
"GUI"
);
data:tablesListAA = [=> ];
gui:guiWindow = Expr(
Border Box(Left(10), Right(10), Top(10), Bottom(10), Sides(15),
V List Box(
gui:cb = Combo Box(
{},
selection = gui:cb << GetSelected();
Print("Selected: " || selection);
Current Data Table(data:tablesListAA[selection]);
Print("Current Data Table: " || (Current Data Table() << Get Name));
),
Button Box("Add Table",
filePath = Pick File("Select JMP File", "$SAMPLE_DATA", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "newJmpFile.jmp");
dt = Open(filePath);
Eval(
Eval Expr(
dt << On Close(
tb = Expr(dt);
_tableName = tb << get name;
Print("Trying to remove: " || _tableName);
)
)
);
dtName = dt << Get Name();
Insert Into(data:tablesListAA, dtName, dt);
gui:cb << Set Items(data:tablesListAA << Get Keys);
)
)
)
);
nw = New Window("Test table selection", gui:guiWindow);
テーブルを追跡するために、Subscribe To Data Table List() の使用も検討してみてください。私はこれを使って、例えばJMPのスクリプトエディタの上部に表示されるテーブルリストに非常に似たものを構築しました。これは、名前の変更やテーブルのクローズ/オープンを処理できます(ただし、構築はより複雑で、問題もあります)。
どういうわけか、Eval(Eval Expr(Excpr))) にテーブルを焼き込むのは、このユースケースでは間違っていると判断しました。もう一度書き直してみます。