Vérifiez si la plaquette d'une chaîne d'entrée est contenue dans une table de donnéesJ'ai une chaîne d'entrée ci-dessous :
For( i = 1, i <= N Rows( dtWaferIDList ), i++,
tempi = Column( dtWaferIDList, 1 )[i];
InputString = If( i == 1, "'", "" ) || InputString || tempi || If( i < N Rows( dtWaferIDList ), "','", "'" );
);
Et une table1 que je tire d'une base de données. Je voudrais vérifier si (dans la colonne Wafer du tableau 1) toutes les plaquettes de la chaîne d'entrée sont contenues dans cette colonne.
- si toutes les tranches ont des données : afficher le message = "données pour toutes les tranches disponibles".
- sinon : afficher le message = "aucune donnée disponible".
Merci!
Tableau de donnéesScriptRe: Vérifier si la plaquette d'une chaîne d'entrée est contenue dans une table de donnéesVous pouvez très probablement utiliser un tableau associatif pour cette comparaison Applications pour les tableaux associatifs . Découvrez la partie Comparer des colonnes dans deux tables de données différentes
Re: Vérifier si la plaquette d'une chaîne d'entrée est contenue dans une table de données@jthi vous a orienté dans la bonne direction.L'approche que vous proposez utilise une chaîne littérale très longue.Je suggère que vous utilisiez soit des tableaux associatifs, soit une liste JMP.
Vous trouverez ci-dessous un script simple qui ouvre une table de données contenant des plaquettes.Il crée ensuite une table de données contenant un ensemble aléatoire de plaquettes.Enfin, il vérifie si l'ensemble aléatoire contient toutes les tranches de la première table de données.
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: Vérifier si la plaquette d'une chaîne d'entrée est contenue dans une table de donnéesBonjour Nelson,
J'apprécie l'aide ! Je suis encore un peu nouveau sur JMP et je n'ai pas encore du tout utilisé les tableaux associatifs. J'ai lu à ce sujet sur le guide de script et l'index ; mais j'ai encore une certaine confusion. Voici où j'en suis dans mon code : (directement après avoir ouvert la table WaferRgDt depuis une base de données)
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>
Lorsque je lance ceci, j'obtiens une boîte de message vide avec un point... donc quelque chose ne va toujours pas. Je me demande si c'est un problème de logique ou de syntaxe. J'ai eu du mal à trouver comment écrire des clés dans une boîte de message si c'est même possible de le faire. J'espère que c'était assez clair. Merci encore!
Re: Vérifier si la plaquette d'une chaîne d'entrée est contenue dans une table de donnéesPour convertir une liste de chaînes en une chaîne, vous pouvez utiliser 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: Vérifier si la plaquette d'une chaîne d'entrée est contenue dans une table de donnéesÉgalement utilisé ce message de discussion pour aider à écrire le code ci-dessus Re : Comment comparer rapidement deux listes (éléments peu communs) ?