<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />일부 열을 추가하여 새 열을 생성하고 있습니다. 추가할 열은 파일에서 이름을 가져오고 이름을 배열 목록으로 작성합니다. 열 이름과 열 수가 변경될 수 있습니다. 열 수가 변경되면 변경 사항을 반영하도록 수식을 편집해야 합니다. 열 이름 배열 목록을 사용하여 추가하려는 모든 열을 지정하지 않고 수식에 동적으로 추가하는 방법이 있습니까?
dt=현재 데이터 테이블();
Cols=연관 배열();
Cols["A1"]={ColA, ColB, ColC};
Cols["A2"]={ColE, ColF, ColG};
Cols["abc"]={"총계1", 총계2};
newcolExpr = Expr(
dt << New Column(Counts["abc"][1], Numeric, Continuous, Formula( If(Expr(Cols["A1"][1]) + Expr(Cols["A1"][2]) + Expr(Cols["A1"][3]) > 0,1,0)));
dt << New Column(Counts["abc"][2], Numeric, Continuous, Formula( If(Expr(Cols["A2"][1]) + Expr(Cols["A2"][2]) + Expr(Cols["A2"][3]) > 0,1,0)));
);
Eval(Eval Expr(newColExpr));
내 문제에 대한 제안에 감사드립니다.
감사해요!
동적 jsl의 가독성을 높이는 데 도움이 되는 몇 가지 표기법을 사용할 수 있습니다.
문자열에 따옴표를 포함해야 하는 경우 지루한 \!" 표기법을 사용하는 대신 "\[ ...로 문자열을 시작하면 이후의 모든 이스케이프 문자에는 \!가 필요하지 않습니다. 표기법 - ]"로 문자열을 마무리합니다.
예를 들어:
str = "\[ "안녕하세요" ]\";
표시(str);
show(구문 분석(str))
둘째, 변수를 사용하여 jsl 명령을 동적으로 구성하는 경우 ^my_variable^ 표기법을 사용하여 변수를 삽입할 수 있는 EvalInsert 함수를 사용할 수 있습니다.이렇게 하면 SubstituteInto를 사용할 필요가 없습니다.
두 가지 방법을 결합하면 다음 패턴을 사용하여 동적 코드를 래핑할 수 있습니다.
Eval(Parse(EvalInsert("\[
대체에 ^var^ 표기법을 사용하는 jsl-statements
]\")));
예를 들어:
전역 지우기();
//예제 테이블 만들기
dt = 새 테이블( "테스트",
행 추가( 3 ),
새 열( "A", 숫자, 연속, 형식( "최고", 1 ), 값 설정( [0, 1, 1] ) ),
새 열( "B", 숫자, 연속, 형식( "최고", 12 ), 값 설정( [0, 2, 2] ) ),
새 열( "C", 숫자, 연속, 형식( "최고", 12 ), 값 설정( [0, 3, 3] ) )
);
//기준 배열 정의
Cols = 연관 배열();
Cols["A1"] = {"A", "B", "C"};
Cols["abc"] = {"총계1", "총계2"};
//반복적으로 하위 문자열 만들기
Eval(Parse(EvalInsert("\[
s1 = 열["A1"][1];
]\")));
For( i = 2, i <= N 항목( Cols["A1"] ), i++,
Eval(Parse(EvalInsert("\[
s1 = s1 || "+" || 열["A1"][^i^]
]\")));
);
Eval(Parse(EvalInsert("\[
newcol_s1 = dt << 새 열( Cols["abc"][1],
숫자, 연속,
수식( If (^s1^ > 0, 1, 0 ) )
]\")));
문자열에서 표현식을 동적으로 빌드하는 한 가지 방법입니다. 표현식과 비교할 때 문자열이 조작하기 더 쉽다고 생각합니다.
여기에 예가 있습니다. 그것은 "반드시" 더 간단한 방법이지만 작동합니다.
전역 지우기 () ;
//예제 테이블 만들기
dt = 새 테이블 ( "시험" ,
행 추가 ( 삼 ) ,
새 열 ( "ㅏ" , 숫자 , 마디 없는 , 체재 ( "최상의" , 1 ) , 값 설정 ( [ 0 , 1 , 1 ] ) ) ,
새 열 ( "비" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) , 값 설정 ( [ 0 , 2 , 2 ] ) ) ,
새 열 ( "씨" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) , 값 설정 ( [ 0 , 삼 , 삼 ] ) ) ,
새 열 ( "디" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) , 값 설정 ( [ 4 , 0 , 4 ] ) ) ,
새 열 ( "이자형" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) , 값 설정 ( [ 5 , 0 , 5 ] ) ) ,
새 열 ( "에프" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) , 값 설정 ( [ 6 , 0 , 6 ] ) )
) ;
//기준 배열 정의
콜스 = 연관 배열 () ;
콜스 [ "A1" ] = { ㅏ , 비 , 씨 } ;
콜스 [ "A2" ] = { 디 , 이자형 , 에프 } ;
콜스 [ "알파벳" ] = { "합계1" , "합계2" } ;
//반복적으로 하위 문자열 만들기
s1 = "Expr(Cols[\!"A1\!"][1])" ;
을 위한 ( 나 = 2 , 나 <= N개 항목 ( 콜스 [ "A1" ] ) , 나 ++,
s1 = s1 || " + " || 대리자 ( "Expr(Cols[\!"A1\!"][_i_])" , 만료 ( _나_ ) , 숯 ( 평가 ( 나 ) ) )
) ;
s2 = "Expr(Cols[\!"A2\!"][1])" ;
을 위한 ( 나 = 2 , 나 <= N개 항목 ( 콜스 [ "A2" ] ) , 나 ++,
s2 = s2 || " + " || 대리자 ( "Expr(Cols[\!"A2\!"][_i_])" , 만료 ( _나_ ) , 숯 ( 평가 ( 나 ) ) )
) ;
// 표현식을 나타내는 문자열, 하위 문자열을 _s_로 대체
newcol_s1 = "dt << New Column( Cols[\!"abc\!"][1], Numeric, Continuous, Formula( If( _s_ > 0, 1, 0 ) ) )" ;
로 대체 ( newcol_s1 , 만료 ( _에스_ ) , s1 ) ;
newcol_s2 = "dt << New Column( Cols[\!"abc\!"][2], Numeric, Continuous, Formula( If( _s_ > 0, 1, 0 ) ) )" ;
로 대체 ( newcol_s2 , 만료 ( _에스_ ) , s2 ) ;
//완전한 문자열 파싱
e1 = 구문 분석 ( newcol_s1 ) ;
e2 = 구문 분석 ( newcol_s2 ) ;
//하위 문자열 expr을 평가한 다음 전체 표현식을 평가하여 새 열을 만듭니다.
평가 ( 평가 만료 ( e1 ) ) ;
평가 ( 평가 만료 ( e2 ) ) ;