你好!
我需要一些幫助,以便在該表的 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))) 函數裡是不合適的。讓我再重寫一次。