¿Cómo hago un cuadro combinado para mostrar valores únicos?Estimados,
Este script es similar al del libro "JUMP into JMP".
La secuencia de comandos solicita al usuario que seleccione un "DCM", en función de esta selección, se completa la lista "DieNo".
Hay un par de problemas aquí. La lista de "Número de DCM" no está en orden ascendente.
Otro problema: cuando selecciono un número de DCM, se completa la lista "DieNo". Pero esto enumera todos los valores, solo quiero que se enumeren valores únicos.
Para ambas columnas, el tipo de datos es char, sin embargo, el tipo de datos numérico no funciona aquí. Algún consejo sobre este problema.
/* Open the sample data table */
dt = Open( "$Desktop/JMP scripts/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
Unique DCM=Associative array(dt:DCMNo);
nitems(unique DCM);
DCM1= unique DCM<<GET keys=""></GET>
También estoy tratando de incluir un cuadro combinado de selección de fecha. La mejor publicación y la opción más fácil para esto fue "filtro de datos de fecha".
¿JMP me permite mostrar un calendario para las fechas {Un pequeño calendario como se muestra cuando reservamos vuelos desde la fecha de salida hasta la fecha de llegada}.
Salud
San
Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?El índice y la guía de secuencias de comandos son algo débiles con respecto a esta nueva función. Los ejemplos en la guía de secuencias de comandos podrían reforzarse un poco. Aquí hay uno mejor que muestra el calendario. Cuando selecciona una fecha y hace clic en Aceptar que se imprime en la ventana de registro.
Names Default To Here( 1 );
nw = New Window( "Calendar Box Example",
cal = Calendar Box(),
ok_button = button box("OK",
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
nw << close window;
)
);
Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?No necesita una ventana modal para usar el cuadro de calendario.
El cuadro de calendario funciona como un cuadro de edición de números especializado. Maneja las fechas por usted para que no tenga que meterse con formatos o convertir segundos a fechas u horas.
Consulte el Índice de secuencias de comandos o la Guía de secuencias de comandos para conocer el protocolo de mensajes.
Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?No sabía sobre el nuevo cuadro de visualización de calendario () en JMP 13. ¡Genial! ¿Cómo lo usas? Tuve que hacer que el cuadro de diálogo fuera modal para que devolviera algo.
Names Default To Here( 1 );
New Window( "Calendar Box Example", << modal(),
cal = Calendar Box()
);
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?Además, puede usar un cuadro de edición de número() con un formato de fecha o el nuevo cuadro de calendario(). Ambos funcionan bien pero presentan una interfaz diferente para el usuario.
Aquí está el enfoque de Number Edit Box(), del Scripting Index:
Names Default To Here( 1 );
New Window( "Example",
fontobj = numbox = Number Edit Box( 0 )
);
numbox << Set Format( Format( "m/d/y", 12 ) );
numbox << Set( Date MDY( 10, 2, 1989 ) );
Aquí está la solución Calendar Box(), también tomada de Scripting Index:
Names Default To Here( 1 );
New Window( "Calendar Box Example",
cal = Calendar Box()
);
Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?La lista de DCM está en orden alfabético. Está interpretando el MCD como un número. JMP interpreta DCM como una cadena de caracteres.
¿Por qué los valores numéricos no funcionan para DCM o Die? Ese tipo de datos resolvería su problema de pedido.
Limpié algunas cosas para una solución más corta. Aquí lo tienes:
Names Default to Here( 1 );
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?¿Por qué si no selecciono los otros números en el cuadro desplegable y uso el predeterminado, me da un error; si selecciono los otros numeros no me da error.
Soy la versión 17, mac.
Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?@lishuanglin ¿Podría crear una nueva discusión con un script de ejemplo?
Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?Es el script de Mark y los datos proporcionados en esta publicación que encontré al ejecutarlo que al presionar los números del cuadro desplegable predeterminado sin cambiarlos me da un error; seleccionar otros números está bien.
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?Revisando muy rápidamente la secuencia de comandos, el problema es que la secuencia de comandos dentro del cuadro combinado no se activa en la creación inicial. La solución más simple es agregar algo como
select1 << Set(2, Run Script(0));
select1 << Set(1, Run Script(1));
al final del guión. Esto cambiará el valor en el cuadro combinado y luego activará el script una vez.
Otra opción bastante fácil sería cambiar el script dentro del cuadro combinado a expresión y luego ejecutarlo una vez que se haya creado la ventana.
Ver más...
O use << Get Function al final del script con Eval
Eval(select1 << get function);
Re: ¿Cómo hago que el cuadro combinado muestre valores únicos?Gracias !