동일한 루프에서 이미 값이 할당된 후 For Each Row 루프에서 셀에 값을 할당합니다.데이터 테이블에 For Each Row 함수를 사용하고 있습니다. 이 함수는 일련의 If 문을 통해 일부 열의 값을 평가한 후, 결과에 따라 :Correct_Process 열에 값을 할당합니다.
현재는 이렇게 설정해 두었습니다.
For Each Row(
dt,
If( :Module == "M05" & :Measurement == "Conductivity",
If(:Actual > m5_cond_hi | :Actual < m5_cond_low,
:Correct_Process = "Incorrect",
:Correct_Process = "Correct"
);
If( splits_detected == 1 & Contains( col_name_list, "PMC_FreeForm" ),
If( :PMC_FreeForm == "DI" | Contains(:PMC_FreeForm, "Mod 5 pump off"),
If( :Actual != 0,
:Correct_Process = "Incorrect",
:Correct_Process = "Correct"
);
);
);
If( splits_detected == 1 & Contains( col_name_list, "CPMC_Conductivity" ),
num_cond = Num(:CPMC_Conductivity);
lim_hi = num_cond + 0.6;
lim_low = num_cond - 0.6;
If( :Actual > lim_hi | :Actual < lim_low,
show("Evaluated Incorrect");
:Correct_Process = "Incorrect",
show("Evaluated Correct");
:Correct_Process = "Correct"
);
);
스크립트를 실행했을 때 :CPMC_Conductivity 값이 "13.2"이고 :Actual 값이 13.5인 경우, :Correct_Process 열에는 여전히 "Incorrect" 값이 할당됩니다. 흥미롭게도, show() 문 때문에 로그에 "Evaluated Correct"가 표시되는데, 이는 예상대로입니다. 즉, If 문은 올바르게 평가되지만 :Correct_Process에는 "Correct" 값이 할당되지 않았음을 의미합니다.
:Correct_Process 열을 기본적으로 첫 번째 중첩 If 문으로 할당한 후, 세 번째 중첩 if 문에서 더 구체적인 검사로 덮어쓰려고 하기 때문이라고 생각합니다. 하지만 이 그룹 내에 이 검사 외에도 다른 조건(예: 두 번째 중첩 if 문)에서는 성공적으로 덮어쓸 수 있는 유사한 검사가 있는데, 여기서 제가 놓친 부분이 무엇인지 궁금합니다.
자동화 및 스크립팅윈도우Re: 동일한 루프에서 이미 값이 할당된 후 For Each Row 루프에서 셀에 값을 할당합니다.루프 내에서 같은 셀 값을 여러 번 덮어쓰는 데에는 이유가 있나요?
Re: 동일한 루프에서 이미 값이 할당된 후 For Each Row 루프에서 셀에 값을 할당합니다.또한, 예시 데이터 세트를 제공해 주실 수 있나요?
빠르게 확인해보니 잘 작동하는 것 같습니다
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
For Each Row(dt,
If(:height > 60,
Write("\!N", Row(), " 1: If");
:sex = "A";
,
Write("\!N", Row(), " 1: Else");
:sex = "B";
);
If(:weight > 70,
Write("\!N", Row(), " 2: If");
:sex = "AA";
,
Write("\!N", Row(), " 2: Else");
:sex = "BB";
);
);
또한 << 데이터 업데이트 시작 및 << 데이터 업데이트 종료를 활용할 수도 있습니다.
Re: 동일한 루프에서 이미 값이 할당된 후 For Each Row 루프에서 셀에 값을 할당합니다.첫 번째 If() 함수 아래에 있는 세 개의 If() 함수는 서로 독립적으로 실행됩니다. 즉, 첫 번째 If() 함수가 참(True)이면 각 행에 대해 각 함수가 평가됩니다.
JSL 디버거를 사용하여 코드를 단계별로 살펴보면서 값이 변경되는 시점을 확인할 수 있습니다. 그러면 코드 로직이 원하는 대로 작동하지 않는 부분을 파악할 수 있습니다.
샘플 데이터 테이블을 제공해 주시면 커뮤니티에서 문제를 더 깊이 파헤칠 수 있을 것입니다.
Re: 동일한 루프에서 이미 값이 할당된 후 For Each Row 루프에서 셀에 값을 할당합니다.아니요, 다른 분의 스크립트를 참고해서 재구성하려고 했는데, 어떻게 이런 결과가 나오는지 헷갈렸습니다. 질문 덕분에 좋은 아이디어가 떠올랐고, 더 자세히 살펴보니 스크립트의 이 부분은 의도한 대로 작동하는 것 같았습니다. 스크립트 후반부에서 다시 덮어씌워진 것뿐이었습니다. @txnelson 저는 세 번째 덮어씌워진 부분을 찾기 위해 디버거를 사용했었는데, 제안해 주셔서 감사합니다!