¿Cómo busco valores únicos en la columna y los uso en la ventana de entrada?Tengo una tabla que se parece a esto, lo que me gustaría hacer es buscar valores únicos en la columna "Color de taza", luego tener una ventana emergente para que el usuario ingrese un sabor correspondiente para cada color de taza único. .
| Color de la taza | calorías | Gusto | Clasificación | Ensayador |
| azul | 140 | 4 | 2 | 1 |
| verde | 80 | 7 | 1 | 4 |
| amarillo | 200 | 2 | 3 | 6 |
| púrpura | 130 | 3 | 6 | 4 |
| azul | 140 | 3 | 5 | 2 |
| azul | 140 | 4 | 4 | 3 |
| amarillo | 200 | 5 | 7 | 1 |
Una vez que tengamos un sabor para cada color de taza, me gustaría agregar una nueva columna que se complete según la entrada que obtuvimos del usuario.
| Color de la taza | calorías | Gusto | Clasificación | Ensayador | Sabor |
| azul | 140 | 4 | 2 | 1 | cereza |
| verde | 80 | 7 | 1 | 4 | frambuesa |
| amarillo | 200 | 2 | 3 | 6 | chocolate |
| púrpura | 130 | 3 | 6 | 4 | realmente menta |
| azul | 140 | 3 | 5 | 2 | cereza |
| azul | 140 | 4 | 4 | 3 | cereza |
| amarillo | 200 | 5 | 7 | 1 | chocolate |
Todavía soy bastante nuevo en JSL y he pasado las últimas horas revisando foros en busca de orientación, pero parece que no puedo reconstruir esto, un poco de ayuda sería muy apreciada.
Re: ¿Cómo busco valores únicos en la columna y los uso en la ventana de entrada?El uso de una ventana Modal es un tipo de ventana muy singular.Hay varias reglas que debes seguir.Uno de los cuales implica un cuadro de botón con el texto "OK".Tiene una función especial en una ventana modal.Así que puedes usarlos, pero necesitarás estudiarlos y practicar un poco con ellos.
Mi preferencia no es usar ventanas modales, sino usar elementos Functions() o Expr() para encapsular el código, evitando que se ejecute hasta que el script indique que debe ejecutarse.A continuación se muestra un ejemplo simple de cómo hacerlo.
Names Default To Here( 1 );
// Get the list of unique colors
Summarize( dt, colorList = by( :Cup Color ) );
// Initialize the flavor list and make it the same
// length as the colorList
flavorList = {};
For( i = 1, i <= N Items( colorList ), i++,
Insert Into( flavorList, "" )
);
// Create the display window
nw = New Window( "Select Flavors",
//<< Modal,
Text Box( "Enter in Flavors for each Color" ),
tb = Table Box(
String Col Box( "Colors", colorList ),
scb = String Col Edit Box( "Flavors", flavorList )
),
Button Box( "OK",
nw << close window;
// Create the flavor table and update it to
// the original table
dt2 = New Table( "combined",
New Column( "Cup Color", character, set values( colorList ) ),
New Column( "Flavors", character, set values( flavorList ) )
);
dt << Update( With( dt2 ), Match Columns( :Cup Color = :Cup Color ) );
close( dt2, nosave );
runAdditionalCodePlease;
)
);
// Set the String Col Edit Box action
scb << Set Function( Function( {this, which}, flavorList[which] = scb << get( which ) ) );
runAdditionalCodePlease = Expr(
Dialog("This represents the kind of things that",
"you may want to run after the data entry.",
"By placing the code inside an Expr() or in",
"a Function(). The code will be run only",
"when executed within the code."
)
);Re: ¿Cómo busco valores únicos en la columna y los uso en la ventana de entrada?De hecho, necesito que mi secuencia de comandos espere la entrada del usuario antes de continuar.
Descubrí en la guía de secuencias de comandos que puedo hacer esto usando el mensaje modal y pensé que lo había agregado correctamente, pero cuando ejecuto la secuencia de comandos, ahora la tabla no se actualiza; el registro dice "Nombre no resuelto: botón en acceso". o evaluación de 'Botón' , Botón( 1 ) /*###*/"
// Get the list of unique colors
Summarize( dt, colorList = by( :Cup Color ) );
// Initialize the flavor list and make it the same
// length as the colorList
flavorList = {};
For( i = 1, i <= N Items( colorList ), i++,
Insert Into( flavorList, "" )
);
// Create the display window
nw = New Window( "Select Flavors",
<< Modal,
Text Box( "Enter in Flavors for each Color" ),
tb = Table Box(
String Col Box( "Colors", colorList ),
scb = String Col Edit Box( "Flavors", flavorList )
),
Button Box( "OK",
nw << close window;
// Create the flavor table and update it to
// the original table
dt2 = New Table( "combined",
New Column( "Cup Color", character, set values( colorList ) ),
New Column( "Flavors", character, set values( flavorList ) )
);
dt << Update( With( dt2 ), Match Columns( :Cup Color = :Cup Color ) );
close( dt2, nosave );
)
);
// Set the String Col Edit Box action
scb << Set Function( Function( {this, which}, flavorList[which] = scb << get( which ) ) );Re: ¿Cómo busco valores únicos en la columna y los uso en la ventana de entrada?¡Perfecto gracias!Re: ¿Cómo busco valores únicos en la columna y los uso en la ventana de entrada?Bienvenido a la comunidad.
Primero, tengo una sugerencia sobre cómo acelerar su aprendizaje de JSL.
¡Lea la guía de secuencias de comandos!
Está disponible en
Ayuda==>Libros==>Guía de secuencias de comandos
A continuación se muestra un script barebones para lograr lo que solicitó.
Names Default To Here( 1 );
dt = New Table( "Untitled 2",
Add Rows( 7 ),
New Column( "Cup Color",
Character,
"Nominal",
Set Selected,
Set Values( {"blue", "green", "yellow", "purple", "blue", "blue", "yellow"} )
),
New Column( "Calories",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [140, 80, 200, 130, 140, 140, 200] )
),
New Column( "Taste",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4, 7, 2, 3, 3, 4, 5] )
),
New Column( "Ranking",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2, 1, 3, 6, 5, 4, 7] )
),
New Column( "Tester",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 4, 6, 4, 2, 3, 1] )
)
);
// Get the list of unique colors
Summarize( dt, colorList = by( :Cup Color ) );
// Initialize the flavor list and make it the same
// length as the colorList
flavorList = {};
For( i = 1, i <= N Items( colorList ), i++,
Insert Into( flavorList, "" )
);
// Create the display window
nw = New Window( "Select Flavors",
Text Box( "Enter in Flavors for each Color" ),
tb = Table Box(
String Col Box( "Colors", colorList ),
scb = String Col Edit Box( "Flavors", flavorList )
),
Button Box( "OK",
nw << close window;
// Create the flavor table and update it to
// the original table
dt2 = New Table( "combined",
New Column( "Cup Color", character, set values( colorList ) ),
New Column( "Flavors", character, set values( flavorList ) )
);
dt << Update( With( dt2 ), Match Columns( :Cup Color = :Cup Color ) );
close( dt2, nosave );
)
);
// Set the String Col Edit Box action
scb << Set Function( Function( {this, which}, flavorList[which] = scb << get( which ) ) );