Vérifier 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 tranches de la chaîne d'entrée sont contenues dans cette colonne.
- si tous les wafers ont des données : message d'affichage = "données pour tous les wafers disponibles".
- sinon : message d'affichage = "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éesMerci à vous deux! Semble fonctionner maintenant. Je vous en suis reconnaissant!
Re : Vérifier si la plaquette d'une chaîne d'entrée est contenue dans une table de donnéesVotre valeur msg est spécifiée de manière incorrecte.Le ci-dessous fonctionnera
msg = "\!N#Data is unavailable for the following wafers:" || Char( uncommon2 << Get Keys );
Re : Vérifier si la plaquette d'une chaîne d'entrée est contenue dans une table de donnéesUtilisez debug Show()s et un petit ensemble de données pour tester où vous vous trompez (ouvrez la fenêtre du journal depuis View / Log).
Peut-être que cela vous aidera à avancer:
Names Default To Here(1);
dt1 = Open("$SAMPLE_DATA/Big Class.jmp");
dt1 << Select Rows([1,2,3]);
dt2 = dt1 << Subset(selected rows);
dt1 << clear select;
dt1_uniq = Associative Array(dt1:name);
dt2_uniq = Associative Array(dt2:name);
dt1_copy = dt1_uniq;
dt2_copy = dt2_uniq;
dt1_copy << Remove(dt2_copy);
Show(concat items(dt1_uniq << get keys, ", "));
Show(concat items(dt2_uniq << get keys, ", "));
Show(concat items(dt1_copy << get keys, ", "));
Show(N Items(dt1_uniq), N Items(dt2_uniq), N Items(dt1_copy));Re : Vérifier si la plaquette d'une chaîne d'entrée est contenue dans une table de données@jthi
Je ne vois pas en quoi cela résout mon problème particulier. Lorsque j'exécute votre script, rien ne se passe. J'ai besoin que les clés du tableau associatif soient visibles pour l'utilisateur et affichées dans une boîte de message.
unique wafers = Associative Array( WaferRgDt:Wafer );
given wafers = Associative Array( dtWaferIDList:WaferList );
intersection = unique wafers; intersection << Intersect( given wafers); //intersection between arrays
//uncommon represents wafers that have no data associated with it.
uncommon = given wafers; uncommon2 <<REMOVE></REMOVE>
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 : Un moyen rapide de comparer deux listes (éléments peu communs) ?
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 dans JMP et je n'ai pas encore 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>
Quand je lance ceci, je reçois une boîte de message vide avec une période ... donc quelque chose semble toujours faux. 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ées@jthi vous a orienté dans la bonne direction.Votre approche proposée utilise une très longue chaîne littérale.Je vous suggère d'utiliser soit des tableaux associatifs, soit une liste JMP.
Vous trouverez ci-dessous un script simple qui ouvre une table de données contenant des tranches.Il crée ensuite une table de données contenant un ensemble aléatoire de tranches.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éesVous pouvez très probablement utiliser Associative Array pour cette comparaison Applications pour les tableaux associatifs . Découvrez la partie Comparer des colonnes dans deux tables de données différentes