For 루프가 의도한 대로 작동하지 않음안녕하세요,
매우 당황스러운 문제가 2개 있습니다.
1) 아래의 간단한 for 루프에는 단일 출력에 대해 충족되는 3가지 조건이 있습니다. 저는 수동으로 보고 그래프를 작성하여 8개 조합이 모두 실제로 데이터에 존재하는지 확인했습니다. 그러나 이는 X1 열의 모든 셀에 x1, x2 및 x3만 채워지는 한쪽으로 치우쳐 나타납니다. 예를 들어 x2 항목에는 할당된 항목 수의 두 배가 됩니다. 하위 집합을 통한 추가 검사에서 A1, B1 및 C1 열은 실제로 x2 및 x4 모두에 대해 충족되며 이는 동일한 공유가 됩니다. 모든 열은 동일한 데이터 및 모델링 유형을 공유합니다.
나는 또한 무슨 일이 일어날지 보기 위해 항목을 두 배로 모으는 항목을 차단했습니다. 그런 다음 항목은 예를 들어 x2로 묶입니다.
For( i = 1, i <= N Rows ( dt ), i++,
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1";
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2";
);
);
2) &를 사용하여 셀에 값을 할당하여 코드를 단축하면 "L 값이 아닌 개체에 할당하려고 시도하는 중" 오류가 발생합니다. 이는 내 코드를 단축하고 여러 개의 다른 루프를 사용하지 않으려는 시도입니다. 아래는 3개의 기준과 3개의 출력의 예입니다.
For( i = 1, i <= N Rows ( dt ), i++,
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2";
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y2" & :Z1[i] = "z1";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y4" & :Z1[i] = "z4";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y1" & :Z1[i] = "z1";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y2" & :Z1[i] = "z4";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y4" & :Z1[i] = "z2";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3";
);
);
어떤 안내라도 감사하겠습니다. 사전에 도움을 주셔서 감사합니다!
품질 및 프로세스 엔지니어링Re: For 루프가 의도한 대로 작동하지 않습니다.또한 코드에서 열 이름이 올바르게 호출되는지 확인했으며 줄 끝에 쉼표와 세미콜론을 모두 시도했습니다. A1 열의 가능한 값을 다른 for 루프로 분리하여 코드를 더 작은 덩어리로 나누었지만 동일한 문제가 있습니다.
Re: For 루프가 의도한 대로 작동하지 않습니다.안녕 @StarfruitBob ,
당신은 가까이 ...
구문 함수라면 If( 조건 1, 결과 1, 조건 2, 결과 2, 그렇지 않으면 결과 )입니다.
따라서 후행 세미콜론을 쉼표로 교체하여 명령문을 다시 작업하십시오.
For( i = 1, i <= N Rows ( dt ), i++,
If(
// condition 1 = :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1"
// result 1 = :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2"
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2"
,
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3"
,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y2" & :Z1[i] = "z1"
,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y4" & :Z1[i] = "z4"
,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y1" & :Z1[i] = "z1"
,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y2" & :Z1[i] = "z4"
,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y4" & :Z1[i] = "z2"
,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3"
);
);
HTH.
건배,
스탠
Re: For 루프가 의도한 대로 작동하지 않습니다.안녕 스탠,
빠른 답변 감사합니다!이것은 내가 이미 실험한 것이며 예를 들어 x1, x2 및 x3 채우기 대신 x1, x2 및 x4가 채워집니다.
이는 X1 및 Y1 열과 같은 여러 출력에서도 발생합니다.
Re: For 루프가 의도한 대로 작동하지 않습니다.예, Stan이 제안한 것처럼 쉼표를 사용해야 합니다. 비밀이라면
편집: 나는 당신이 원하는 것 같아요
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1" , :X1[i] = "x1" ,
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2" , :X1[i] = "x2" ,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1" , :X1[i] = "x3" ,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2" , :X1[i] = "x4" ,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1" , :X1[i] = "x3" ,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2" , :X1[i] = "x4" ,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1" , :X1[i] = "x1" ,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2" , :X1[i] = "x2" ,
throw("Nothing matched!") // this is the otherwise case
);
실제로 여러 할당을 원하면 ; 보다는 &
:X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2" // change this
:X1[i] = "x1"; :Y1[i] = "y1"; :Z1[i] = "z2"; // to this
그것은 작동 할 수 있지만 다음 사람이 퍼즐을 풀기에는 매우 약하고 매우 어려울 것입니다. 당신이 말했듯이 컴파일러는
a=1 & b=2
~처럼
a = ( ( 1 & b ) = 2 )
L-값 메시지를 생성합니다. 오류 메시지가 프로그래머가 말하는 것이 아니라면 좋을 것입니다. "1 & b"는 변수 이름이 아니기 때문에 = 오른쪽의 값 2를 = 왼쪽의 "1 & b"에 저장할 수 없습니다. .
실제로 컴파일러는 =1 및 b=2에 대해 상당히 좋은 작업을 수행합니다.
'Assign' , 1 & b = /*###*/2 /*###*/의 액세스 또는 평가에서 L-값이 아닌 개체에 할당을 시도합니다.
Re: For 루프가 의도한 대로 작동하지 않습니다.이것은 말 그대로 이 모든 것 중 두 번째 시도였으며 주말에 다시 갔고 효과가 있었습니다.처음에 이렇게 시도했을 때 작동하지 않는 이유에 대한 설명이 없습니다.당신의 응답을 주셔서 감사합니다!