Sto cercando di prendere una lista di file attraverso la funzione Pick File ().
Voglio scorrere l'elenco dei file e per ogni file che voglio eseguire uno stack, calcolare alcune statistiche da una colonna nella tabella dei dati impilati, quindi utilizzare i valori calcolati per aggiornare una tabella di dati esistente.
(L'elenco dei file è un elenco di lotti di produzione e sto cercando di creare uno script che mostri la media, lo stdev e il CPK dei lotti di produzione)
Quando guardo solo un file, riesco a far funzionare i passaggi precedenti ma non appena riesco a provare più file, non riesco a farlo funzionare. Il ciclo looping dei file for viene eseguito una sola volta. Ho inserito una dichiarazione (i == NItems (lst)) e mostra anche che la condizione per il ciclo non è soddisfatta.
Di seguito è riportato un estratto con il ciclo for in questione.
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));
);
);Allegherò il resto dello script e alcuni file di test a questo post.
Ho provato un certo numero di cose diverse per aggirare questo, ma niente sembra funzionare.
Se c'è un modo migliore per realizzare ciò che sto cercando, fatemelo sapere.
O potresti semplicemente rendere anche io una variabile locale.
Mentre è possibile (e talvolta conveniente) definire esplicitamente le variabili locali associate a una definizione di funzione, penso che in generale sia preferibile trattare tutte le variabili come locali alla definizione della funzione. In questo modo non entrerai nella situazione in cui la variabile for-loop è accidentalmente globale. Puoi dichiarare tutte le variabili locali usando la seguente sintassi:
foo = function( {}, {Default Local},
// implement function here e.g.
for (i=1,i<=10,i++,
// do something
);
return(somevalue);
);Nel caso in cui ho capito dove la sceneggiatura stava andando male. Forse qualcuno può approfondire il motivo per cui ciò accade.
L'errore sembrava essere dovuto a problemi di scope con la mia variabile incrementante nei miei loop for.
Stavo usando loop multipli per tutti che utilizzavano lo stesso "i" come variabile di incremento. Modificandolo in modo che ogni ciclo avesse una variabile incrementale unica (come "fi", "lst_i")