J'essaie de récupérer une liste de fichiers à l'aide de la fonction Pick File ().
Je souhaite parcourir la liste des fichiers et, pour chaque fichier, effectuer une pile, calculer des statistiques à partir d'une colonne de la table de données empilée, puis utiliser les valeurs calculées pour mettre à jour une table de données existante.
(La liste de fichiers est une liste de lots de production et j'essaie de créer un script qui présente les tendances de la moyenne, de stdev et du CPK des lots de production)
Lorsque je ne regarde qu'un fichier, je peux appliquer les étapes ci-dessus, mais dès que j'essaie plusieurs fichiers, il semble que je ne parvienne pas à le faire fonctionner. La boucle for en boucle dans les fichiers ne s'exécute qu'une seule fois. J'ai placé une instruction show (i == NItems (lst)) et elle montre même que la condition de la boucle n'est pas remplie.
Vous trouverez ci-dessous un extrait de la boucle for en question.
get_lst_loop = Function({files},
Local({tmp,lst,dt,dt_stack},
Try(
tmp = {};
For(i=1,i<=NItems(files),i++,
show(i==NItems(files));
dt = Open(files[i],Invisible);
dt_stack = bRay_stack(dt);
lst = get_lst(dt_stack,"Data");
Close(dt_stack,NoSave);
Close(dt,NoSave);
Insert Into(tmp,lst)
);
,
Throw("Error in making analysis matrix: "||char(exception_msg));
);
Return(Eval List(tmp));
);
);Je joindrai le reste du script et quelques fichiers de test à ce message.
J'ai essayé plusieurs solutions pour résoudre ce problème, mais rien ne semble fonctionner.
S'il y a une meilleure façon d'accomplir ce que j'essaie, faites-le-moi savoir.
Ou vous pouvez simplement créer une variable locale.
Bien qu'il soit possible (et parfois pratique) de définir explicitement les variables locales associées à une définition de fonction, je pense qu'en général, il est beaucoup plus préférable de traiter toutes les variables comme locales par rapport à la définition de fonction. De cette façon, vous ne vous retrouverez pas dans une situation où votre variable de boucle for est accidentellement globale. Vous pouvez déclarer toutes les variables locales en utilisant la syntaxe suivante:
foo = function( {}, {Default Local},
// implement function here e.g.
for (i=1,i<=10,i++,
// do something
);
return(somevalue);
);Juste au cas où j'aurais compris où le script allait mal. Peut-être que quelqu'un peut expliquer plus en détail pourquoi cela se produit.
L'erreur semblait être due à des problèmes de portée avec ma variable d'incrémentation dans mes boucles for.
J'utilisais plusieurs boucles for qui utilisaient toutes le même "i" en tant que variable incrémentante. En le changeant, chaque boucle avait une variable d’incrémentation unique (comme "fi", "lst_i")