¿Cómo agrego automáticamente todas las columnas al conmutador de columnas en .jsl?Soy un principiante con JSL, todavía estoy aprendiendo.
Tengo muchos archivos que necesito revisar con Graph Builder, y cada uno tiene un número diferente de columnas. La única constante es que sé que quiero la columna 1 como superposición, la columna 2 en el eje X, la columna 3 en el eje Y y el resto de las columnas en el selector de columnas. Me encantaría tener una secuencia de comandos que abriera todas las ventanas de Graph Builder para todas las tablas de datos actualmente abiertas con esta configuración, pero no sé cómo hacerlo. Esto es lo más cerca que he llegado:
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
)
)
);
Las dos cosas con las que necesito ayuda: (1) descubrir cómo configurar el conmutador de columnas para cargar automáticamente todas las columnas en la tabla de datos sin preguntarme, y (2) envolver este script en un ciclo que itera sobre todos los abiertos tablas de datos
¡Gracias de antemano!
La personalización en masaRe: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?Gracias a aquellos aquí que ayudaron, siento que no agregué mucho de mi parte aquí. Esto es básicamente lo que terminé con:
El objetivo era tener una secuencia de comandos que pasara por una carpeta llena de archivos de texto de uno en uno, la cargara y mostrara una ventana del Generador de gráficos con algunas configuraciones preestablecidas, luego, cuando se cierra el Generador de gráficos, abre automáticamente el el proximo.
El enfoque que usé fue administrarlo con variables globales: "regFlist" es la lista de archivos que quedan por abrir, y "stopReg" es una bandera que cuando se enciende interrumpe el proceso.
Hay dos secuencias de comandos: (1) reg_Next.jsl: verifica regFlist y, si está vacío, solicita una carpeta para usar; de lo contrario, carga el siguiente archivo de la lista regFlist (si regStop no está establecido), (2) reg_Stop.jsl: simplemente vacía regFlist y establece la variable regStop; utilizado para detener el proceso antes de tiempo.
Soy un principiante total con .jsl, por lo que estoy muy abierto a cualquier comentario/crítica constructiva.
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: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?@BHarris Sería bueno si pudiera agregar su solución a esta discusión, para que pueda estar disponible para toda la comunidad de discusión.
Re: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?Me lo imaginé. Realmente desearía que JMP tuviera una terminal a veces...
Si alguien más se encuentra aquí buscando esta misma solución, responda y compartiré lo que terminé.
Re: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?@txnelson -- Acabo de pasar unas 3 horas con el Índice de secuencias de comandos y la Guía de secuencias de comandos tratando de hacer que esto funcione, pero no pude averiguar cómo hacer que la función "al cerrar ()" abra el siguiente archivo. Esto es lo que pensé que *debería* funcionar, pero no funciona.
(Recordatorio, el objetivo es recorrer estos archivos uno a la vez, abrir una ventana del Creador de gráficos y permitirme evaluar el archivo, luego, cuando cierre la ventana del Creador de gráficos, debería cerrar la tabla de datos y abrir el siguiente archivo y trazarlo.)
Este script se llama "jmp_reg_4.jsl" y está en mi escritorio:
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" );
);Pensé que estaba creando una lista global de archivos para examinar, y luego en cada invocación, si todavía tengo elementos en la variable "flist" (lista de archivos), simplemente tomamos el siguiente, lo cargamos y lo trazamos. Pero no funciona como esperaba: cuando cierro la ventana del generador de gráficos, cierra correctamente la tabla de datos, pero luego no hace nada más.
Re: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?Tampoco puedo encontrar una manera, pero unas pocas pulsaciones de la tecla de tabulación cambiarán el enfoque a la lista de columnas en el selector de columnas.

Re: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?No sé de una manera de hacer la segunda solicitud.Re: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?¡Gracias!
¿Qué tal el #2 en mi lista? (Creo que puedo descifrar el #3...)Re: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?Todo lo que sugieres es factible en JMP.
Puede usar "Archivos en el directorio ()" para obtener la lista de archivos y luego recorrerlos.
Puede adjuntar una función "Al cerrar ()" al objeto Graph Builder, que cerrará la tabla de datos actual y luego obtendrá el siguiente archivo de su lista de archivos de la lista "Archivos en el directorio ()".
Los ejemplos y la descripción están en el índice de secuencias de comandos
Ayuda==>Índice de secuencias de comandos
Re: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?¡Impresionante! Seguí tratando de usar "Column Switcher(:Column(3), :Column(all))" y variaciones de eso
¿Sería posible alguna de estas mejoras en el guión? (1) Dale en su lugar una carpeta llena de archivos txt y haz que los abra uno a la vez en Graph Builder, y cuando cierro Graph Builder, cierra el archivo de tabla de datos correspondiente y abre el siguiente, (2) automáticamente Mueva el enfoque al conmutador de columnas para que pueda comenzar inmediatamente a pasar las flechas por las variables sin necesidad de hacer clic en el cuadro del conmutador de columnas, (3) tamaño completo de la ventana Graph Builder en la pantalla cuando se abre.
JMP se está convirtiendo rápidamente en mi software favorito.Re: ¿Cómo agrego automáticamente todas las columnas al selector de columnas en .jsl?El guión es muy sencillo,
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 )
);
);