Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslSono davvero un principiante con JSL, sto ancora imparando...
Ho molti file che devo rivedere con Graph Builder e ognuno ha un diverso numero di colonne. L'unica costante è che so di volere la colonna 1 come Overlay, la colonna 2 nell'asse X, la colonna 3 nell'asse Y e tutte le altre colonne nel Column Switcher. Mi piacerebbe avere uno script che aprisse tutte le finestre di Graph Builder per tutte le tabelle di dati attualmente aperte con queste impostazioni, ma non so come farlo. Questo è il più vicino che ho ottenuto:
Graph Builder(
Size( 1900, 1200 ),
Variables(
X( :Column(2) ),
Y( :Column(3) ),
Overlay( :Column(1) )
),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) ),
Column Switcher( :Column(3) ),
SendToReport(
Dispatch(
{},
"",
ScaleBox
)
)
);
Le due cose per cui ho bisogno di aiuto: (1) capire come impostare il Column Switcher per caricare automaticamente tutte le colonne nella tabella dati senza chiedermelo, e (2) avvolgere questo script in un ciclo che itera su tutto il tabelle di dati.
Grazie in anticipo!
Personalizzazione di massaRe: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslGrazie a quelli qui che mi hanno aiutato, mi sento come se non avessi aggiunto molto del mio qui. Questo è fondamentalmente quello che ho finito con:
L'obiettivo era quello di avere uno script che attraversasse una cartella piena di file di testo uno alla volta, lo caricasse e aprisse una finestra di Graph Builder con alcune impostazioni preimpostate, quindi quando Graph Builder viene chiuso, si apre automaticamente il prossimo.
L'approccio che ho utilizzato è stato quello di gestirlo con variabili globali: "regFlist" è l'elenco dei file rimasti da aprire, e "stopReg" è un flag che quando attivato interrompe il processo.
Ci sono due script: (1) reg_Next.jsl -- controlla regFlist, e se è vuoto, chiede una cartella da usare; altrimenti carica il file successivo dall'elenco regFlist (se regStop non è impostato), (2) reg_Stop.jsl -- svuota semplicemente regFlist e imposta la variabile regStop; utilizzato per interrompere il processo in anticipo.
Sono un principiante assoluto con .jsl, quindi sono molto aperto a qualsiasi feedback/critica costruttiva.
reg_Next.jsl
//!<BR /><BR />// use global variables (since hey, what could go wrong? ;)</img> )
Names Default To Here( 0 );
// get path to self
selfPath = get default directory() || "/reg_Next.jsl";
// check to see if user has requested a stop
If( stopReg == 1 ,
stopReg = 0;
regFlist = {};
Stop();
);
// initialize list of files to review if there aren't any in the list
If( Is Empty( regFlist ) | N Items( regFlist ) < 1,
jmpDir = Pick Directory( "Select the jmp directory." );
regFlist = Files In Directory( jmpDir );
);
// open data table and remove it from the regFlist
dt = Open( jmpDir || "/" || regFlist[1] );
regFlist = Remove( regFlist, 1 );
// set up for column switcher
colList = dt << get column names( string );
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
Remove From( colList, 1, 2 );
// open graph builder
gb = dt << Graph Builder(
size( 800, 600 ),
Variables( X( As Column( col2 ) ), Y( As Column( col3 ) ), Overlay( As Column( col1 ) ) ),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) )
);
cs = gb << Column Switcher( col3, colList );
// set up mechanism to re-run myself when graph builder is closed
If( N Items( regFlist ) == 0,
gb << on close( Close( dt, nosave ) ),
gb << on close(
Close( dt, nosave );
Open( selfPath, Run JSL( 1 ) );
)
);reg_Stop.jsl
//!
Names Default To Here( 0 );
regFlist = {};
stopReg = 1;Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jsl@BHarris Sarebbe bello se potessi aggiungere la tua soluzione a questa discussione, in modo che possa essere disponibile per l'intera comunità di discussione.
Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslL'avevo capito. Vorrei davvero che JMP avesse un terminale a volte...
Se qualcun altro si trova qui alla ricerca della stessa soluzione, per favore rispondi e condividerò ciò che ho ottenuto.
Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jsl@txnelson -- Ho appena trascorso circa 3 ore con lo Scripting Index e la Scripting Guide cercando di farlo funzionare, ma non sono riuscito a capire come fare in modo che la funzione "on close()" apra il file successivo. Ecco cosa pensavo *dovrebbe* funzionare, ma non funziona.
(Promemoria, l'obiettivo è scorrere questi file uno alla volta, aprendo una finestra di Graph Builder e permettendomi di valutare il file, quindi quando chiudo la finestra di Graph Builder, dovrebbe chiudere la tabella dei dati e aprire il file successivo e traccialo.)
Questo script si chiama "jmp_reg_4.jsl" ed è sul mio desktop:
Names Default To Here( 0 ); // <-- trying to use globals so the file list will be maintained between invocations
/*
All of what you suggest is doable in JMP.
You can use "Files in Directory()" to get the file list, and then loop through them.
You can attach an "On Close()" function to the Graph Builder object, which will close the current data table, and then go get the next file from your list of files from the "Files in Directory()" list.
Examples and description are in the Scripting Index
Help==>Scripting Index
*/
If( Not( As Global( "flist" ) ),
jmpDir = Pick Directory( "Select the jmp directory." );
flist = Files In Directory( jmpDir );
);
dt = Open( jmpDir || "/" || flist[1] );
Remove( flist, 1 );
colList = dt << get column names( string );
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
Remove From( colList, 1, 2 );
gb = dt << Graph Builder(
size( 800, 600 ),
Variables( X( As Column( col2 ) ), Y( As Column( col3 ) ), Overlay( As Column( col1 ) ) ),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) )
);
cs = gb << Column Switcher( col3, colList );
gb << on close(
Close( dt, nosave );
run script( "/Users/bh/Desktop/jmp_reg_4.jsl" );
);Pensavo di creare un elenco globale di file da esaminare, e quindi ad ogni invocazione, se ho ancora elementi nella variabile "flist" (file-list), prendiamo semplicemente il successivo, lo carichiamo e lo tracciamo. Ma non funziona come mi aspetto: quando chiudo la finestra del generatore di grafici, chiude correttamente la tabella dei dati, ma poi non fa nient'altro.
Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslNemmeno io riesco a trovare un modo, ma alcune pressioni del tasto tab sposterà l'attenzione sull'elenco delle colonne nel selettore di colonne.

Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslNon conosco un modo per fare la seconda richiesta.Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslGrazie!
Che ne dici del numero 2 nella mia lista? (Penso di poter capire # 3 ...)Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslTutto ciò che suggerisci è fattibile in JMP.
Puoi usare "Files in Directory ()" per ottenere l'elenco dei file e quindi scorrerli.
È possibile allegare una funzione "On Close()" all'oggetto Graph Builder, che chiuderà la tabella di dati corrente, quindi andrà a prendere il file successivo dall'elenco di file dall'elenco "Files in Directory()".
Esempi e descrizione si trovano nello Scripting Index
Aiuto==>Indice degli script
Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslDegno di nota! Ho continuato a provare a usare "Column Switcher( :Column(3), :Column(all) )" e le sue varianti
Qualcuno di questi miglioramenti alla sceneggiatura sarebbe possibile? (1) Dagli invece una cartella piena di file txt e fallo aprire uno alla volta in Graph Builder, e quando chiudo Graph Builder, chiude il file Data Table corrispondente e apre quello successivo, (2) automaticamente sposta lo stato attivo sul commutatore di colonna in modo da poter iniziare immediatamente a scorrere le variabili senza dover fare clic nella casella del commutatore di colonna, (3) a schermo intero la finestra del Costruttore di grafici quando si apre.
JMP sta rapidamente diventando il mio software preferito.Re: Come aggiungo automaticamente tutte le colonne al Column Switcher in .jslLo scripting è molto semplice,
Names Default To Here( 1 );
// Loop across all data tables
For( i = 1, i <= N Table(), i++,
dt = Data Table( i );
// Find all of the column names
colList = dt << get column names( string );
// Get the first 3 columns for special processing
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
// Remove first 2 from column switcher columns from the overall list
Remove From( colList, 1, 2 );
// Run the Graph Builder
dt << Graph Builder(
Size( 570, 621 ),
Variables(
X( As Column( col2 ) ),
Y( As Column( col3 ) ),
Overlay( As Column( col1 ) )
),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) ),
Column Switcher( col3, colList )
);
);