我試圖通過Pick File()函數獲取文件列表。
我想循環遍歷文件列表,對於我想要執行堆棧的每個文件,從堆棧數據表中的列計算一些統計信息,然後使用計算值更新現有數據表。
(文件列表是生產批次的列表,我正在嘗試創建一個趨勢於生產批次的平均值,stdev和CPK的腳本)
當我只看一個文件時,我可以讓上面的步驟工作,但是當我嘗試多個文件時,我似乎無法讓它工作。 循環遍歷文件的for循環只運行一次。 我放置了一個show(i == NItems(lst))語句,它甚至表明不滿足循環的條件。
以下是有問題的for循環的摘錄。
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));
);
);我將附加腳本的其餘部分和一些測試文件到這篇文章。
我已經嘗試了很多不同的東西來解決這個問題,但似乎沒有任何工作。
如果有更好的方法來完成我想要的,請告訴我。
雖然有可能(有時候方便)明確定義與函數定義關聯的局部變量,但我認為通常我們更傾向於將所有變量視為函數定義的局部變量。 這樣你就不會陷入你的for-loop變量意外全局的情況。 您可以使用以下語法將所有變量聲明為local:
foo = function( {}, {Default Local},
// implement function here e.g.
for (i=1,i<=10,i++,
// do something
);
return(somevalue);
);以防我弄清楚腳本出錯的地方。 也許有人可以詳細說明為什麼會發生這種情況。
該錯誤似乎是由於我的for循環中的遞增變量的範圍問題。
我正在使用多個for循環,它們都使用與遞增變量相同的“i”。 通過更改它,每個循環都有一個唯一的遞增變量(如“fi”,“lst_i”)