열을 분할하고 JSL을 사용하여 분할을 기반으로 여러 다중 생성여보세요,
기존 테이블을 읽고 관심있는 열을 찾아야합니다 [열 이름이 "데이터"라고 말함].
"데이터"열은 "점"으로 구분 된 숫자이며 길이가 같습니다.
내 목표는이 테이블을 열고 "data"열을 읽고 "점"을 제거하고 [값의 길이에 따라] 새 열을 만들고 각 열에 각 값을 보유하는 것입니다.
원본 테이블 :
데이터
------
123.56.8.342
431.02.0.567
318.00.1.816
.....
예상 출력 :
데이터 c1 c2 c3 c4 c5 c6 c7 c8 c9
-------------------------------------------------- ----------------------------
123.56.8.342 1 2 3 5 6 8 34 2
431.02.0.567 4 3 1 0 2 0 5 6 7
318.00.1.816 3 1 8 0 0 1 8 1 6
내 첫 번째 시도에서 [trial1.jmp] 2 개의 for 루프 [열을 생성하기위한 내부 루프와 행 수를위한 다른 루프]가있는 경우, 더 많은 열을 생성합니다 [즉, 읽은 데이터 너비 * 행 수 없음] .
두 번째 시도 [trail2.jmp]에서 올바른 열 수를 얻었지만 값은 정적입니다.
첨부는 내 jsl입니다.
도움을 주셔서 감사합니다, 이것에 자정 기름을 태우십시오.:(
감사,
데이비드
데이터 테이블Re : JSL을 사용하여 분할을 기반으로 열을 분할하고 다중 다중 생성.jsl의 버전 2 만 확인했는데 아주 가깝습니다.
수정 된 버전을 첨부했습니다.
주로 루프 부분을 수정했습니다. 식을 사용하여 Eval (Parse ())없이 관리 할 수있는 방법이있을 수 있지만 이번에는이 솔루션을 사용했습니다. 모든 행에 대해 동일하게 유지되는 변수 clean_DATA의 데이터를 사용했습니다. 또한 수식이 필요한 경우 Eval (Parse ()) (또는 식?)을 사용하여 데이터 테이블에서 수식이 계속 작동하도록해야합니다. 수식이 필요하지 않으면 수식 대신 << 각 값 설정을 사용합니다.
For(i = 1, i <= ncols_to_add, i++, // the || operator joins two strings
Eval(Parse("dt << New Column(\!"c\!" || Char(i),Numeric, Continous,
Formula(Num(Substr(Regex(:data, \!"\D\!", \!"\!", GLOBALREPLACE ), "||char(i)||", 1 )));
)));")); // put 1 bit in each column
);<< Set Each Value를 사용하면 for 루프는 다음과 같습니다.
For(i = 1, i <= ncols_to_add, i++, // the || operator joins two strings
dt << New Column("c" || Char(i),Numeric, Continous,
<< Set Each Value(Num(Substr(Regex(:data, "\D", "", GLOBALREPLACE ), i, 1 )));
)
); // put 1 bit in each columnRe : JSL을 사용하여 분할을 기반으로 열을 분할하고 다중 다중 생성귀하의 요청을 수행하는 방법은 다음과 같습니다.Substitute () 함수를 사용하면 수식이 변수 "i"에 대한 참조가 아닌 변수 "i"의 실제 값을 수식에 포함 할 수 있습니다.
Names Default To Here( 1 );
dt = Current Data Table();
col = Column( dt, "DATA" );
colLength = Length( col[1] );
For( i = 1, i <= colLength, i++,
If( Substr( col[1], i, 1 ) != ".",
Eval(
Substitute(
Expr(
dt << New Column( "c" || Char( i ), Numeric, Continous, Formula( Num( Substr( :data, __i__, 1 ) ) ) )
),
Expr( __i__ ), i,
)
)
)
);Re : JSL을 사용하여 분할을 기반으로 열을 분할하고 다중 다중 생성내가 놓친 것을 알려 주신 Jamo에게 감사드립니다. 내가 가까이 있다는 걸 알았어;)
dint는 함수에 내장 된 "각 값 설정"에 대해 알고 있습니다.
네, 모든 것이 작동합니다!
감사,
데이비드
Re : JSL을 사용하여 분할을 기반으로 열을 분할하고 다중 다중 생성고마워 짐.
당신은 우아한 해결책이 있습니다.
제안한 방법에 따라 col 이름이 계속되지 않는 것으로 나타났습니다. "점"이 발견되면 Col #을 건너 뜁니다]; 작은 열 이름 마사지가 필요합니다.
질문:
열에 공식이 있고 eval / substitute를 사용하거나 Jamo가 성능 관점에서 제안한대로 "각 값 설정"으로 수행 할 것을 제안 하시겠습니까?
감사,
데이비드