Come nominare CORRETTAMENTE una tabella?Tutto,
So come dare un nome a un tavolo. Ma a volte, se quel nome esiste già (per caso o da sinistra dopo precedenti esecuzioni dello script), il nome invece di impostare "La mia tabella" verrebbe impostato su "La mia tabella 2". Come posso impostarlo correttamente esattamente su ciò che voglio che sia impostato?
Sto cercando uno snippet di codice che faccia questo: controlla se esiste una tabella con questo nome, se sì, chiude o rinomina quella vecchia, quindi nomina questa con il nome esatto che ho richiesto.
Ho provato la funzione Try() ma probabilmente non capisco del tutto come funziona. Ho provato alcune istruzioni if() complesse che ottengono l'elenco di tutte le tabelle e scorrono i nomi, ecc. È troppo lungo e su un numero elevato di tabelle rallenta in modo significativo.
Quindi, mi chiedevo, qual è il modo CORRETTO e convenzionale di nominare una tabella in modo da essere sicuri che la tabella sia chiamata esattamente così?
Ri: Come nominare CORRETTAMENTE una tabella?L'unico problema con questo approccio che vedo è che... beh, fondamentalmente stai cercando di rendere Set Name più sicuro da usare scrivendo invece una nuova funzione. Ma in quella funzione usi di nuovo Imposta nome, che è soggetto agli stessi problemi che stai cercando di risolvere...
Ma non dovrebbe avere importanza per la tua tabella immediata e quindi per lo script stesso, quindi qui va bene.
A questo punto probabilmente chiuderei semplicemente le vecchie tabelle senza salvarle.Ri: Come nominare CORRETTAMENTE una tabella?Sì, è così che ho cercato di avvicinarmi. Probabilmente non capisco appieno come funziona Try(). Lasciami provare a modo tuo.Ri: Come nominare CORRETTAMENTE una tabella?Come ho già detto, vorrei evitare di tirare l'elenco di tutte le tabelle aperte. Quando si producono centinaia di tabelle di riepilogo nell'esecuzione di uno script, è necessario molto tempo.Ri: Come nominare CORRETTAMENTE una tabella?Sono sicuro che diversi membri della comunità possano avere una varietà di modi diversi per affrontare questo problema.Eccone uno che sembra essere un approccio piuttosto semplice.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
xt = dt << subset( selected rows( 0 ), selected columns( 0 ) );
setName = Function( {tdt, Name},
{tdt, Name},
Try( Data Table( Name ) << set name( Name || "_Old" ) );
tdt << set name( name );
);
setName( xt, "big class" );Ri: Come nominare CORRETTAMENTE una tabella?Non sono a conoscenza di un modo convenzionale (oltre a evitare nomi già in uso). Sono d'accordo che può essere difficile dopo un tempo di attività prolungato tenere traccia di tutte le finestre aperte.
Ecco un'idea JSL per fare ciò che descrivi (testato in JMP 14). Sembra essere abbastanza efficiente. Per essere sempre disponibile a livello globale, la funzione può essere aggiunta come funzione personalizzata() da uno script di avvio che viene eseguito automaticamente ogni volta che si avvia JMP.
// Function for renaming data table if desired name is used by another open table
rename_if_exists = Function({s},
open_tables = Get Window List(Type("data tables")) << Get Window Title();
exists = Loc(open_tables, s)[1];
If(exists,
Data Table(open_tables[exists]) << set name(open_tables[exists] || "_old")
);
s;
);
// Apply...
dt = New Table(rename_if_exists("untitled 28972"), add rows(10));