Codage efficace de l’état des lignesBonjour, j'essaie de trouver le moyen le plus rapide de modifier l'état des lignes dans JSL. J'essaie normalement d'éviter de sélectionner des lignes car c'est plus lent que d'obtenir des lignes où(), mais je ne vois pas comment utiliser une matrice ou une liste de lignes pour changer l'état des lignes. Les lignes doivent-elles être sélectionnées pour changer d’état ?
Question légèrement connexe : la palette de couleurs est-elle scriptable ? Je vois la boîte d'affichage "colorbox()" mais l'index de script indique qu'elle n'est accessible que par la plateforme. Je n’en ai pas nécessairement besoin, car j’ai pu trouver quelques solutions de contournement. Un exemple de ce que je veux dire par là est présenté sous le code ici.
Merci,
Mike
//Clear Log();
Names Default To Here( 1 );
dt = open( "$SAMPLE_DATA\Big Class.jmp");
//get rows where; not sure what to do with this
myRows = dt << get rows where(:height == 63);
// use select where works but could be slower
dt << select where(:height == 63);
dt << exclude(1);
dt << colors("Red");Palette de couleurs, exemple à partir des préférences utilisateur :

Re : Codage efficace de l'état des lignesOui, j'ai tendance à l'oublier et on me le rappelle de temps en temps lorsque je consulte l'aide en ligne de JMP.J'ai probablement simplement utilisé "selectwhere()" et plus tard, j'ai obtenu "rowswhere()" pour plus de commodité en ce qui concerne la gestion des lignes exclues et rapidement (en termes de codage, pas d'exécution) en récupérant celles qui sont au-dessus/en dessous des limites des spécifications, cependant Je suppose que je pourrais obtenir une matrice de colonnes distincte d'exclus() contenant des uns et des zéros, et simplement multiplier. Tant qu'il gère correctement les valeurs manquantes, il fonctionnera probablement correctement et s'exécutera rapidement.
Re : Codage efficace de l'état des lignesJ'ai également travaillé dans l'industrie des semi-conducteurs et j'ai découvert que, dans de nombreuses grandes applications, déplacer les données paramétriques dans des matrices et utiliser les différentes fonctions matricielles plutôt que de gérer les fonctions de table de données est une méthode beaucoup plus rapide.
Re : Codage efficace de l'état des lignesMerci Jim. L'habitude de choisir "obtenir" plutôt que "sélectionner" est en quelque sorte ancrée après des années de résultats de script lents dans vba et jsl, mais je suppose que je pense surtout aux cas où je dois parcourir non seulement les lignes mais aussi chaque colonne. .
Voici quelques scénarios concernant les données de test des semi-conducteurs, dans lesquels chaque ligne est un appareil testé en production et chaque colonne (après les colonnes d'index) est un test paramétrique sur les appareils. Chaque colonne a des limites de spécifications stockées en tant que propriété.Un script parcourt et détermine colonne par colonne le rendement, les retombées élevées et faibles, etc. (beaucoup d'autres choses mais ce n'est pas pertinent).Généralement, avec les données sur les semi-conducteurs, elles sont testées avec arrêt au premier échec, de sorte que les colonnes à droite d'un échec peuvent manquer. Si les données sont plutôt testées en cas d'échec, il pourrait être intéressant de les convertir en « arrêt en cas d'échec ». J'ai donc également un script à convertir en données d'arrêt au premier échec.Dans ces deux cas, le passage aux lignes Where() par rapport à Select Where() a considérablement amélioré le temps d'exécution du script. Il est possible que cela soit plus rapide en utilisant selectwhere() si la table est invisible ; Je n'ai pas vérifié cela.
Cependant, pour les états de ligne, il ne s'agit que d'une boucle, alors maintenant que je prends du recul et que j'y réfléchis, ce n'est probablement pas trop mal.
Voici une capture d'écran de deux versions de script pour mon script d'arrêt en cas d'échec. Ce changement a fait une énorme différence dans le temps d’exécution.
Et un tout autre sujet pourrait être la raison pour laquelle je l'analyse comme une chaîne. Je devrais revenir en arrière et revoir cela, mais il y a des années, j'ai trouvé que l'analyse sous forme de chaîne était beaucoup plus rapide, mais cela aurait pu être alors que j'avais encore les instructions selectwhere().

Re : Codage efficace de l'état des lignesJe n'ai pas de réponse à votre question sur la palette de couleurs, mais j'ai exécuté une sélection rapide de l'emplacement par rapport à l'obtention des lignes où et j'ai trouvé peu de différence.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
start = HP Time();
For( i = 1, i <= N Rows( dt ), i++,
dt << select where( :NPN1 > :npn1[i] )
);
Show( "select where", Format( (HP Time() - start) / 100, "Hr:m:s" ) );
start = HP Time();
For( i = 1, i <= N Rows( dt ), i++,
dt << select where( :NPN1 > :npn1[i] )
);
Show( "get rows", Format( (HP Time() - start) / 100, "Hr:m:s" ) );
et j'ai eu les résultats :
"sélectionner où";= "2:51:55";
« obtenir des lignes » ; = "2:50:40" ;