Verifique si la oblea de una cadena de entrada está contenida dentro de una tabla de datosTengo una cadena de entrada de abajo:
For( i = 1, i <= N Rows( dtWaferIDList ), i++,
tempi = Column( dtWaferIDList, 1 )[i];
InputString = If( i == 1, "'", "" ) || InputString || tempi || If( i < N Rows( dtWaferIDList ), "','", "'" );
);
Y una tabla1 que extraigo de una base de datos. Me gustaría verificar si (en la columna de obleas de la tabla 1) todas las obleas de la cadena de entrada están contenidas en esa columna.
- si todas las obleas tienen datos: mensaje en pantalla = "datos para todas las obleas disponibles".
- si no es así: mensaje en pantalla = "no hay datos disponibles".
¡Gracias!
Tabla de datosScriptingRe: comprobar si la oblea de una cadena de entrada está contenida en una tabla de datosLo más probable es que pueda usar Associative Array para esta comparación Aplicaciones para matrices asociativas . Mira la pieza Comparar columnas en dos tablas de datos diferentes
Re: comprobar si la oblea de una cadena de entrada está contenida en una tabla de datos@jthi te ha apuntado en la dirección correcta.Su enfoque propuesto está utilizando una cadena literal muy larga.Le sugiero que use matrices asociativas o una lista JMP.
A continuación se muestra un script simple que abre una tabla de datos que contiene obleas.Luego crea una tabla de datos que tiene un conjunto aleatorio de obleas.Finalmente, verifica si el conjunto aleatorio contiene todas las obleas de la primera tabla de datos.
names default to here(1);
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
unique wafers = associative array(dt:Wafer);
// Create a random wafer table and see if it contains all wafers
dtRand = new table("Random",
add rows(60),
new column("Rand Wafer", set each value(random integer(1,24)));
);
random wafers = associative array(dtRand:Rand wafer);
Random wafers << Intersect( unique wafers );
if(n items(Random wafers) == n items( unique wafers),
msg = "data for all wafers available",
msg = "no data available"
);
new window("Message", <<MODAL></MODAL>Re: comprobar si la oblea de una cadena de entrada está contenida en una tabla de datosHola Nelson,
¡Agradezco la ayuda! Soy un poco nuevo en JMP y todavía no he usado matrices asociativas. Lo he leído en la guía de secuencias de comandos y en el índice; pero todavía tengo algo de confusión. Aquí es donde estoy en mi código: (directamente después de abrir la tabla WaferRgDt desde una base de datos)
unique wafers = Associative Array( WaferRgDt:Wafer );
given wafers = Associative Array( dtWaferIDList:WaferList );
intersection = unique wafers; intersection << Intersect( given wafers); //intersection between arrays
//uncommmon2 represents wafers that have no data associated with it.
uncommon2 = given wafers; uncommon2 <<REMOVE></REMOVE>
Cuando ejecuto esto, aparece un cuadro de mensaje vacío con un punto ... así que algo parece estar mal todavía. Preguntándome si es un problema de lógica o sintaxis. He tenido algunos problemas para encontrar cómo escribir claves en un cuadro de mensaje si es posible hacerlo. Espero que haya sido lo suficientemente claro. ¡Gracias de nuevo!
Re: comprobar si la oblea de una cadena de entrada está contenida en una tabla de datosPara convertir una lista de cadenas en una cadena, puede usar Concat Items ()
Names Default To Here(1);
aa = Associative Array({"bun",
"shoe",
"tree",
"door"}
);
uniqKeys = aa << get keys;
Show(uniqKeys);
Show(Concat Items(uniqKeys, ", "));
Re: comprobar si la oblea de una cadena de entrada está contenida en una tabla de datosTambién usé esta publicación de discusión para ayudar a escribir el código anterior Re: forma rápida de comparar dos listas (elementos poco comunes)?