Salut!
J'ai besoin d'aide pour obtenir une référence à la table dans l'instruction On Close de ladite table.
J'ai un script simple : une interface graphique avec un bouton « Ouvrir » qui ouvre un tableau de données, et une liste déroulante contenant une liste de tableaux.
Je conserve également une trace des tables dans un tableau associatif, les noms des tables servant de clés et les références des tables de valeurs.
Je dois gérer plusieurs espaces de noms hérités dans ce script. Pour supprimer un tableau de la liste déroulante, j'utilise l'astuce `Eval(Eval Expr(Expr()))` dans l'instruction `OnClose`. Cependant, cette astuce ne fonctionne pas pour supprimer un tableau d'un tableau associatif.
Il existe une autre astuce avec Function({this}, _dt = ((this << Child) << Get Data Table)). Elle fonctionne correctement pour obtenir la référence à la table de données, mais cesse de fonctionner lorsque je la place dans 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;
Habituellement, j'évalue simplement le nom/la référence de la table à la fermeture. Vous pouvez également utiliser < Ceci fera référence à la fenêtre du tableau de données (l'index du script en contient un exemple).
Voir plus...
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);
Vous pouvez également utiliser la fonction Subscribe To Data Table List() pour gérer les tables. Je l'ai utilisée pour créer une interface très similaire à la liste de tables affichée par exemple dans l'éditeur de scripts de JMP. Elle gère les changements de nom, les fermetures et les ouvertures de tables (sa mise en œuvre est plus complexe et présente certains problèmes).
Pour une raison qui m'échappe, j'ai décidé que l'intégration de la table dans Eval(Eval Expr(Excpr))) n'était pas appropriée dans ce cas précis. Je vais essayer de la réécrire.