Come impostare le variabili dal file json importato/jmp Associative Array?Ciao a tutti,
Sto usando Application Builder per sviluppare uno strumento per l'analisi dei dati con l'integrazione di Python. Ho creato un pulsante per esportare le selezioni dei parametri di un utente nel caso in cui desiderino ricaricarle in un secondo momento ed eseguire la stessa pre-elaborazione dei dati. Attualmente, il modo in cui esporto i parametri è che prima li scrivo in un csv (usando Save Text File(...) ), quindi può essere aperto come una tabella jmp e da lì, le due colonne (Variabili e Valori) possono essere impostato su un array associativo e lo salvo anche come file JSON da utilizzare in un'applicazione back-end. Ho incluso un'immagine di come potrebbe apparire la tabella jmp esportata (per le variabili 9 e 10, a seconda della selezione, potrebbero esserci una, due o tre variabili aggiuntive, quindi la tabella (e l'array associativo/json) non lo sono sempre della stessa taglia. Alcuni dei valori sono stringhe e altri sono numeri.
La mia domanda è come posso ricaricare al meglio questi parametri (preferibilmente sia dalla tabella jmp che dal file JSON) in modo che le variabili siano impostate correttamente sui loro valori e possano essere utilizzate nei calcoli successivi. Ho giocato con For Each (...) dagli array associativi, ma non sono stato in grado di impostare correttamente le variabili. Questo non è il modo più semplice per salvare i parametri, ma non sono riuscito a capire come ottenere le variabili e i valori correttamente programmati per essere inviati direttamente a una tabella jmp. L'attuale metodo che sto utilizzando per salvare i parametri funziona per i miei scopi, ma se un altro metodo o se la modifica della struttura/layout del csv/table rendesse più semplice il caricamento dei parametri, sono aperto ai suggerimenti.
Grazie per qualsiasi aiuto.
ScriptingRi: Come impostare le variabili dal file json importato / jmp Associative Array?Grazie ancora, @Craige_Hales ! Questo è un post utile. Sebbene possa essere leggermente ingombrante, dovrei essere in grado di elencare tutte le combinazioni di tasti e utilizzare quei metodi per farlo funzionare.
Ri: Come impostare le variabili dal file json importato / jmp Associative Array?Potresti essere in grado di utilizzare il valore predefinito per l'array associativo oppure potresti testare esplicitamente se la chiave esiste prima di utilizzarla.
Vedere @jthi commenti dentro Array associativo: Try(), Contains() o valore predefinito?.Il set di chiavi è abbastanza piccolo da poter elencare tutte le possibili combinazioni? O è un insieme che non può essere previsto e da cui devi ricavare nuove variabili?
Ri: Come impostare le variabili dal file json importato / jmp Associative Array?Grazie per la risposta! Ho pensato che le ricerche dell'array associativo fossero piuttosto semplici e non stavo provando la sintassi corretta.
Ho ancora un problema però... Per due delle mie variabili, ci sono diverse opzioni (variable1 potrebbe essere chiamata "var1option1", "var1option2", ecc...) e tutte le diverse opzioni hanno ognuna una possibile una, due o tre variabili aggiuntive specifiche per il scelta dell'opzione. Tutti questi nomi di variabili sono diversi. C'è un modo per scaricare questi parametri senza sapere in anticipo quali sono le selezioni?
Come in questo scenario, esisterebbe "var1option1" o "var1option2"... non entrambi, ma non c'è modo per me di saperlo in anticipo e questo script dovrebbe funzionare per tutti i possibili scenari. C'è un modo per evitare errori quando il nome della variabile non esiste nell'array associativo? Sembra che dovrei usare le istruzioni If?
var1option1 = restoredVariables["var1option1"];
var1option1sub1 = restoredVariables["var1option1sub1"];
var1option1sub2 = restoredVariables["var1option1sub2"];
var1option1sub3 = restoredVariables["var1option1sub3"];
var1option2 = restoredVariables["var1option2"];
var1option2sub1 = restoredVariables["var1option2sub1"];
var1option2sub2 = restoredVariables["var1option2sub2"];
Grazie ancora!
Ri: Come impostare le variabili dal file json importato / jmp Associative Array?Cerca di evitare di mantenere più rappresentazioni degli stessi dati su disco. Dato che hai già Python e JSON nel mix, consiglierei JSON come formato del disco. Ecco due esempi; il primo presuppone che tu preferisca l'array associativo in JMP e il secondo presuppone una tabella di dati. Mi propongo per il primo perché i nomi funzionano meglio (sotto).
// 1st example using Associative Array
variables = ["nThings" => 3,
"type" => "favs",
"things" => {"raindrops", "whiskers", "kettles"}];
filename = Save Text File( "$temp/variables.json", As JSON Expr( variables ) );
restoredVariables = Parse JSON( Load Text File( filename ) );
// this is not needed unless you want to compare the restored data to the original...
If( variables == restoredVariables,
Write( "\!nGood restore\!n" ),
Write( "\!nRestore does not match\!n" )
);
Show( variables, restoredVariables );
// 2nd example, using data table
dt = New Table( "variables",
New Column( "key", "character", values( variables << getkeys ) ),
New Column( "val", "expression", values( variables << getvalues ) )
);
dt << save( "$temp/table.json" );
dtRestored = Open( "$temp/table.json" );
dtRestored:val << datatype( "expression" );
// this is not needed, unless you want to compare the restored table to the original...
ok = (dt << Compare Data Tables( showwindow( 0 ), Unlink All, Link( {"key", "key"} ), Link( {"val", "val"} ) )) << Compare with( dtRestored );
Write( "\!n\!nData table on disk:\!n", Load Text File( "$temp/table.json" ) );
If( ok,
Write( "\!ntables match" ),
Write( "\!nhmmm, tables are different" )
);
con l'array associativo le ricerche sono semplici:
type = restoredVariables["type"];
"preferiti"
Ri: Come impostare le variabili dal file json importato / jmp Associative Array?Ecco un esempio molto semplice per illustrare ciò che sto cercando di fare (per il caso dell'array associativo, non per il caso del file .json):
AA = Associative Array();
AA["One"] = {1, 2, 3};
AA["Two"] = {"a", "b", "c"};
key_list = AA << Get Keys();
val_list = AA << Get Values();
For(i=1, i<=N Items(key_list), i++,
key_list[i] = val_list[i];
Show(key_list[i]);
);
L'output del registro per questo è:
// key_list[i] = {1, 2, 3};
// key_list[i] = {"a", "b", "c"};Dov'è il mio risultato desiderato (quindi queste variabili possono essere inviate a Python con Python Send(...) e utilizzate lì):
// One = {1, 2, 3};
// Two = {"a", "b", "c"};Sento che questo è molto vicino a funzionare come vorrei, ma non ho questa fortuna!
Grazie!