표현식 형식의 JSL에 대해 혼란스러워함<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />동일한 보고서에서 두 테이블을 모두 사용하는 스크립트가 필요할 때마다 작은 테이블을 재구성할 수 있도록 작은 테이블을 다른 테이블에 저장하고 싶습니다.이는 테이블 사용자가 하나의 데이터 테이블만 저장하면서 작은 관련 정보 테이블을 쉽게 열 수 있기 때문에 좋은 솔루션인 것 같습니다.
나는 expr() 구문의 레이어에 대해 많은 양의 이를 갈고 난 후에 다음을 작동하게 했습니다....
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open("$SAMPLE_DATA/Abrasion.jmp");
ts=dt<< 스크립트 가져오기();
닫기(dt,nosave);
ne=nameexpr(ts);
eval(substitute(expr(dt2<
//...나중에...
dt2<
dtBigClass=현재데이터테이블();
그런데 질문이 2개...
1) 정말 이렇게 복잡해?스크립트를 얻기 위해 getscript()를 사용한 후에 테이블에 가져온 스크립트를 "넣는" 더 간단한 방법은 없습니까?
2) 스크립트를 실행한 후 dtBigClass 변수가 테이블을 가리키도록 하기 위해 currentdatatable()을 사용하는 것이 마음에 들지 않습니다.아마도 거기에 잘못된 것이 들어가는 경향이 있는 것 같습니다. 스크립트가 실패하거나 타이밍 문제가 있다고 가정해 보겠습니다. 여전히 일부 테이블 또는 다른 테이블을 dtBigClass에 할당하고 있습니다.스크립트는 "New Table("Big Class.. 어쩌구 저쩌구"" 처럼 보이며 " dtBigClass=NewTable("Big Class... 어쩌구 저쩌구..."를 실행하고 싶습니다.더 많이 편집하고 실행할 수 있는 텍스트 문자열 형식으로 스크립트를 "가져올" 수 있는 솔루션이 있으면 매우 기쁠 것입니다. 솔직하게 .
Re: 표현식 형식의 JSL에 대해 혼란스럽습니다.감사해요!
이 두 가지 답변에 모두 감사드립니다.아마도 eval expr() 기반의 것들을 이해하기 위해 더 열심히 노력해야 할 것 같지만, 인정해야 합니다. y 이동 방법은 텍스트 문자열을 평가(구문 분석())하는 것입니다.마음이 덜 편해지고 문자열 부분을 실행하여 내가 만들고 있는 내용을 직접 검사할 수 있습니다.그러나 그것을 문자열로 변환하는 방법을 알 수 없었습니다 ...
char(dt<
ts=dt<
그리고 문자(ts)...
...그건 작동하지 않습니다.
마찬가지로, 2번에 대한 귀하의 답변은 매우 간단해 보이지만 그것이 효과가 있을 것이라고는 생각하지 못했습니다!.나는 아직도 조금 놀랐다. dtBigClass에 넣을 무언가를 반환할 것이라는 것이 나에게는 확실하지 않지만 훌륭하다.
Re: 표현식 형식의 JSL에 대해 혼란스럽습니다.표현을 조작하는 것은 실망스러울 수 있습니다. 함수 인수가 런타임에 평가되는지 아니면 작성된 대로 승인되는지를 아는 것이 항상 쉬운 것은 아닙니다. 일반적으로 표현식을 열 수식이나 테이블 스크립트와 같은 GUI 요소로 전송할 때 인수가 평가되지 않기 때문에 추가 노력이 필요합니다. 때로는 expr(), evalexpr() 등의 최적 사용법을 알아내는 것보다 문자열을 작성한 다음 eval(parse())를 작성하는 것이 더 쉽습니다.
1) 다소 단순화될 수 있다. 이 예에서는 이를 수행하는 두 가지 방법을 보여줍니다.
dt = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ;
dt2 = 열려 있는 ( "$SAMPLE_DATA/Abrasion.jmp" ) ;
//1. 표현
평가 ( 평가 지수 ( dt2 << 새 스크립트 ( "빅클래스" , dtBigClass = 만료 ( dt << 스크립트 받기 )))) ;
//2. 끈
평가 ( 구문 분석 ( "dt2 << newscript(\!"BigClass2\!", dtBigClass2 =" || 숯 ( dt << getscript ) || ")" )) ;
닫다 ( dt , 노세이브 ) ;
dt2 << 실행스크립트 ( "빅클래스" ) ;
dt2 << 실행스크립트 ( "빅클래스2" ) ;
2) 위와 같이 또는 아래와 같이 스크립트 내에서 할당을 수행할 수 있습니다.
dtBigClass = dt2 << 실행스크립트 ( "빅클래스" ) ;
Re: 표현식 형식의 JSL에 대해 혼란스럽습니다.1: 거의 그렇게 복잡해요.NewScript는 인수가 스크립트일 것으로 예상하며 이는 종종 정답입니다. 이번에는 아닙니다.
2: 나도 이 작업에서는 CurrentDatatable을 좋아하지 않습니다.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA/Abrasion.jmp" );
Eval( Eval Expr( dt2 << NewScript( "BigClass", bigclass = Expr( dt << getscript ) ) ) );
대체는 한 가지 방법이지만 EvalExpr을 사용하여 Expr만 평가할 수도 있습니다.EvalExpr의 결과는 다음과 같은 표현식입니다.

아직 평가가 필요합니다.EvalExpr은 Expr을 찾아 평가한 다음 대체된 원래 표현식을 반환했습니다.3행을 다시 보면 NewScript 명령을 실제로 실행하기 위해 Eval이 한 번 더 수행되었습니다. 빅클래스 ).
"BigClass"라는 스크립트가 실행되면 변수를 할당합니다. 빅클래스 , CurrentDatatable이 필요하지 않습니다.