안녕하세요, 아래(섹션 A)는 새 열의 수식에 대한 제 코드이며 작동합니다. 그러나 for 루프를 사용하여 대체하고 싶습니다. 해봤는데(섹션
전혀 출력이 되지 않습니다. 섹션 B에서 내 실수에 대해 조언을 줄 수 있는 사람이 있는지 궁금합니다. smap1 열의 예는 첨부된 표에 있습니다. 감사해요
섹션 A:
dt3 << new column("smap", character,
formula(
If(N Rows( Loc( Words( :smap1, "," ), "0" ) ) >= 3, "0:0:0:0:0:0:0:0",
N Rows( Loc( Words( :smap1, "," ), "1" ) ) >= 3, "1:1:1:1:1:1:1:1",
N Rows( Loc( Words( :smap1, "," ), "2" ) ) >= 3, "2:2:2:2:2:2:2:2",
N Rows( Loc( Words( :smap1, "," ), "3" ) ) >= 3, "3:3:3:3:3:3:3:3",
N Rows( Loc( Words( :smap1, "," ), "4" ) ) >= 3, "4:4:4:4:4:4:4:4",
N Rows( Loc( Words( :smap1, "," ), "5" ) ) >= 3, "5:5:5:5:5:5:5:5",
N Rows( Loc( Words( :smap1, "," ), "6" ) ) >= 3, "6:6:6:6:6:6:6:6",
N Rows( Loc( Words( :smap1, "," ), "7" ) ) >= 3, "7:7:7:7:7:7:7:7",
"0:1:2:3:4:5:6:7"
);
);
);섹션 B:
dt3 << new column("smap", character,
formula(
map={"0","1","2","3","4","5","6","7"};
for (l=1, l<=N items(map), l++,
A=":"||map[l];
B=map[l];
If(N Rows( Loc( Words( :smap1, "," ), char(map[l])) )>= 3, concat(B,A,A,A,A,A,A,A),
"0:1:2:3:4:5:6:7"
);
)
)
);수식이 반환됩니다. 비어 있는() 값.그만큼 을 위한() 루프가 종료될 때 내가 = 9 .논리는 그 때 내가 = 8 루프는 증가기로 돌아간 다음 테스트로 돌아갑니다.에 대한 테스트 l <= N 항목(지도) 실패하고 빈 값을 반환합니다.당신이해야 할 일은 지점에서 루프를 종료하는 것입니다 만약에() 문이 참이면 결과를 반환합니다.다음은 예입니다.
dt3 << New Column( "smap",
character,
formula(
res = "0:1:2:3:4:5:6:7";
For( l = 0, l < 8, l++,
If( N Rows( Loc( Words( :smap1, "," ), Char( l ) ) ) >= 3,
res = Concat Items( Repeat( Insert( {}, Char( l ) ), 8 ), ":" );
Break();
);
);
res;
)
);