Pick File () 함수를 통해 파일 목록을 가져 오려고합니다.
파일 목록을 반복하고 스택을 수행하려는 각 파일에 대해 누적 데이터 테이블의 열에서 일부 통계를 계산 한 다음 계산 된 값을 사용하여 기존 데이터 테이블을 업데이트합니다.
(파일 목록은 생산 로트 목록이며 생산 로트의 평균, 표준 편차 및 CPK 추세를 나타내는 스크립트를 작성하려고합니다)
하나의 파일 만 볼 때 위의 단계를 진행할 수 있지만 여러 파일을 시도하자마자 작동하지 않을 수 있습니다. 파일을 반복 재생하는 for 루프는 한 번만 실행됩니다. 쇼 (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 루프 변수가 실수로 전역에있는 상황에 빠지게 될 것입니다. 다음 구문을 사용하여 모든 변수를 로컬로 선언 할 수 있습니다.
foo = function( {}, {Default Local},
// implement function here e.g.
for (i=1,i<=10,i++,
// do something
);
return(somevalue);
);경우에 대비하여 스크립트가 잘못되어 가고있는 것을 알아 냈습니다. 아마도 이런 일이 일어나는 이유에 대해 더 자세히 설명해 줄 수 있습니다.
이 오류는 내 for 루프에서 변수를 증가시키는 범위 문제로 인한 것 같습니다.
나는 동일한 "i"를 증가 변수로 사용하는 for 루프를 여러 개 사용했습니다. 각 루프가 고유 한 증가 변수 (예 : "fi", "lst_i")를 갖도록 변경함으로써