Estoy intentando capturar una lista de archivos a través de la función Seleccionar archivo ().
Quiero recorrer la lista de archivos y, para cada archivo, realizar una pila, calcular algunas estadísticas a partir de una columna en la tabla de datos apilados, luego usar los valores calculados para actualizar una tabla de datos existente.
(La lista de archivos es una lista de lotes de producción y estoy intentando crear un script que modifique la media, stdev y CPK de los lotes de producción)
Cuando solo miro un archivo, puedo hacer que los pasos anteriores funcionen, pero tan pronto como pruebo varios archivos, parece que no puedo hacer que funcione. El bucle for bucle a través de los archivos solo se ejecuta una vez. He colocado una declaración show (i == NItems (lst)) e incluso muestra que no se cumple la condición para el bucle.
A continuación se muestra un extracto con el bucle for en cuestión.
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));
);
);Adjuntaré el resto del script y algunos archivos de prueba a esta publicación.
He intentado varias cosas diferentes para solucionar esto, pero nada parece estar funcionando.
Si hay una mejor manera de lograr lo que estoy tratando, hágamelo saber.
O simplemente podrías hacer que yo también sea una variable local.
Si bien es posible (y algunas veces conveniente) definir explícitamente las variables locales asociadas con una definición de función, en general creo que es mucho más preferible tratar todas las variables como locales a la definición de función. De esta manera no entrarás en la situación en la que tu variable for-loop es accidentalmente global. Puede declarar todas las variables locales usando la siguiente sintaxis:
foo = function( {}, {Default Local},
// implement function here e.g.
for (i=1,i<=10,i++,
// do something
);
return(somevalue);
);Por si acaso me he dado cuenta de dónde salió mal el guión. Tal vez alguien pueda elaborar más sobre por qué ocurre esto.
El error parece deberse a problemas de alcance con mi variable incremental en mis bucles for.
Estaba usando varios bucles para todos los que usaban la misma "i" como variable de incremento. Al cambiarlo, cada bucle tenía una variable incremental única (como "fi", "lst_i")