Ich versuche, eine Liste von Dateien über die Funktion "Datei auswählen" () abzurufen.
Ich möchte die Liste der Dateien durchlaufen und für jede Datei, die ich einen Stack ausführen möchte, einige Statistiken aus einer Spalte in der gestapelten Datentabelle berechnen und dann die berechneten Werte verwenden, um eine vorhandene Datentabelle zu aktualisieren.
(Die Liste der Dateien ist eine Liste von Produktionslosen. Ich versuche, ein Skript zu erstellen, das den Mittelwert, den Standardwert und den CPK der Produktionslose bestimmt.)
Wenn ich nur eine Datei ansehe, kann ich die obigen Schritte ausführen, aber sobald ich mehrere Dateien ausprobiere, kann ich nicht scheinen, dass sie funktioniert. Die for-Schleife durch die Dateien wird nur einmal ausgeführt. Ich habe eine show (i == NItems (lst)) -Anweisung platziert, und es zeigt sogar, dass die Bedingung für die Schleife nicht erfüllt ist.
Unten ist ein Auszug mit der fraglichen for-Schleife.
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));
);
);Ich werde den Rest des Skripts und einige Testdateien diesem Beitrag beifügen.
Ich habe verschiedene Dinge ausprobiert, um das zu umgehen, aber nichts scheint zu funktionieren.
Wenn es einen besseren Weg gibt, um das zu erreichen, was ich versuche, lass es mich wissen.
Oder Sie könnten auch nur eine lokale Variable machen.
Während es möglich (und manchmal auch praktisch) ist, die lokalen Variablen, die mit einer Funktionsdefinition verknüpft sind, explizit zu definieren, halte ich es generell für besser, alle Variablen als lokal für die Funktionsdefinition zu behandeln. Auf diese Weise geraten Sie nicht in die Situation, in der Ihre for-loop-Variable versehentlich global ist. Sie können alle Variablen mit der folgenden Syntax als lokal deklarieren:
foo = function( {}, {Default Local},
// implement function here e.g.
for (i=1,i<=10,i++,
// do something
);
return(somevalue);
);Nur für den Fall, dass ich herausgefunden habe, wo das Skript schief lief. Vielleicht kann jemand mehr erklären, warum dies geschieht.
Der Fehler schien auf Probleme mit dem Umfang meiner inkrementierenden Variablen in meinen for-Schleifen zurückzuführen zu sein.
Ich habe mehrere for-Schleifen verwendet, die alle dasselbe "i" wie die inkrementierende Variable verwendeten. Durch Ändern, so dass jede Schleife eine eindeutige inkrementierende Variable hatte (wie "fi", "lst_i")