사용자가 여러 변수를 입력하도록 하려고 합니다. 해당 변수가 정상으로 간주되면 확인 버튼이 회색에서 활성화됩니다. 나는 이것을 작동시켰다. 내가 작동하지 않는 것은 Eval Expr(출력)입니다. 계산을 하기 전에 이것이 작동하는지 확인하기 위한 간단한 작업입니다. 스크립트를 실행할 때 확인 버튼이 회색으로 표시된 스크린샷은 다음과 같습니다.

그럴듯한 값을 입력하고 입력 확인을 클릭하면 확인 버튼이 활성 상태로 표시됩니다.

그러나 그것은 내 표현을 실행하고 테이블을 생성하지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까? 저는 JMP 16.0 Pro를 사용하고 있습니다. 내가 정말로 필요한 것에 대해 자세히 알아보기 전에 내 스크립트가 작동하는지 확인하기 위해 테이블을 만드는 것과 같은 매우 간단한 작업을 수행했다고 말했듯이.
Names Default To Here( 0 );
Clear Log();
w = New Window( "Variables",
<<MODAL>= 1 | alpha == 0,
alphaw = New Window( "Error!",
<<MODAL>= 1 | beta == 0,
betaw = New Window( "Error!",
<<MODAL> 90 | percent == 0,
percentw = New Window( "Error!",
<<MODAL> 0.90 | p0 == 0,
p0w = New Window( "Error!",
<<MODAL>= 1 | Abs( beta ) >= 1 | DOEN == 0 |
Abs( percent ) > 90 | percent == 0 | Abs( p0 ) > 0.90 | p0 ==
0 | alpha == 0 | beta == 0, bb << Enable( 0 ),
bb << Enable( 1 ),
Eval Expr( output )
);
)
),
bb = Button Box( "OK" ),
bb << Enable( 0 );
)
)
);
Show( alpha );
Show( beta );
Show( DOEN );
Show( percent );
Show( p0 );
output = Expr(
dt = New Table( "Test Table",
New Column( "a", Set Values( {alpha, beta, N, percent, p0} ) )
);
w << closeWindow;
);</MODAL></MODAL></MODAL></MODAL></MODAL>
Eval(output)을 먼저 해봤는데 안 되서 Eval expr()을 두 번째로 해봤다. 자체 출력을 시도했지만 작동하지 않았습니다.
w를 생성하기 전에 출력 표현식을 이동하고 OK 버튼을 눌렀을 때 출력을 생성합니다.
더보기... 그리고 모달을 사용하고 있기 때문에 모달이 닫히기 전에 스크립트가 실행을 계속하지 않기 때문에 모달이 닫힌 후에 새 테이블을 만들 수도 있습니다.
다음은 원하는 경우 코드를 약간 리팩터링할 수 있는 방법의 한 가지 예입니다(또한 << 최소값 설정 및 << 최대값 설정을 사용하여 숫자 편집 상자에 최소/최대 값을 "강제"할 수 있음). 이를 통해 다음과 같은 경우 확인 단계에서 모든 오류 메시지를 표시할 수도 있습니다.
더보기...Names Default To Here(0);
Clear Log();
validator = function({alpha, beta, N, percent, p0}, {Default Local}, //could also be expression, but this way you avoid creating unnecessary variables
DOEN = 0;
For(i = 1, i < 10, i++,
If(2 ^ i == N,
DOEN = DOEN + 1
)
);
error_list = {};
If(Abs(alpha) >= 1 | alpha == 0,
Insert Into(error_list,"Alpha needs to be between 0 and 1, please fix and try again");
);
If(Abs(beta) >= 1 | beta == 0,
Insert Into(error_list,"Beta needs to be between 0 and 1, please fix and try again");
);
If(DOEN == 0,
Insert Into(error_list,"N should be 2\!U1D3A, do not include centerpoints or repeats with N, please fix and try again");
);
If(Abs(percent) > 90 | percent == 0,
Insert Into(error_list,"The percent needs to be between 0 and 90%, please fix and try again");
);
If(Abs(p0) > 0.90 | p0 == 0,
Insert Into(error_list,"The p0 needs to be between 0 and 0.90, please fix and try again");
);
If(N Items(error_list) > 0,
nw = New Window( "Error!", <<MODAL></MODAL>이름 기본값은 Here(0); 로그 지우기(); validator = function({alpha, beta, N, percent, p0}, {Default Local}, // 식일 수도 있지만 이렇게 하면 불필요한 변수 생성을 피할 수 있습니다. DOEN = 0; For(i = 1, i < 10, i++, If(2 ^ i == N, DOEN = DOEN + 1 ) ); error_list = {}; If(Abs(alpha) >= 1 | alpha == 0, Insert Into(error_list,"Alpha는 다음 사이에 있어야 합니다. 0과 1, 수정하고 다시 시도하십시오."); ); If(Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"베타는 0과 1 사이여야 합니다. 수정하고 다시 시도하십시오." ); ); If(DOEN == 0, Insert Into(error_list,"N은 2\!U1D3A여야 합니다. 중심점을 포함하지 않거나 N을 사용하여 반복하십시오. 수정하고 다시 시도하십시오."); ); If(Abs(퍼센트) > 90 | percent == 0, Insert Into(error_list,"백분율은 0에서 90% 사이여야 합니다. 수정하고 다시 시도하십시오."); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"p0은 0에서 0.90 사이여야 합니다. 수정하고 다시 시도하십시오."); ); If(N Items(error_list) > 0, nw = New Window( "오류!", <
편집하다:
디스플레이 상자 사용을 위한 몇 가지 옵션:
더보기...Names Default To Here(0);
Clear Log();
validator = function({alpha, beta, N, percent, p0}, {Default Local},
error_list = {};
DOEN = 0;
For(i = 1, i < 10, i++,
If(2 ^ i == N,
DOEN = DOEN + 1
)
);
If(Abs(alpha) >= 1 | alpha == 0,
Insert Into(error_list,"Alpha needs to be between 0 and 1, please fix and try again");
);
If(Abs(beta) >= 1 | beta == 0,
Insert Into(error_list,"Beta needs to be between 0 and 1, please fix and try again");
);
If(DOEN == 0,
Insert Into(error_list,"N should be 2\!U1D3A, do not include centerpoints or repeats with N, please fix and try again");
);
If(Abs(percent) > 90 | percent == 0,
Insert Into(error_list,"The percent needs to be between 0 and 90%, please fix and try again");
);
If(Abs(p0) > 0.90 | p0 == 0,
Insert Into(error_list,"The p0 needs to be between 0 and 0.90, please fix and try again");
);
If(N Items(error_list) > 0,
nw = New Window( "Error!", <<MODAL></MODAL>이름 기본값은 Here(0); 로그 지우기(); 유효성 검사기 = function({alpha, beta, N, percent, p0}, {Default Local}, error_list = {}; DOEN = 0; For(i = 1, i < 10, i++, If(2 ^ i == N , DOEN = DOEN + 1 ) ); If(Abs(alpha) >= 1 | alpha == 0, Insert Into(error_list,"Alpha는 0과 1 사이여야 합니다. 수정하고 다시 시도하십시오."); ); If (Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta는 0과 1 사이여야 합니다. 수정하고 다시 시도하십시오."); ); If(DOEN == 0, Insert Into(error_list ,"N은 2\!U1D3A여야 합니다. 중심점을 포함하지 않거나 N을 사용하여 반복하십시오. 수정하고 다시 시도하십시오."); ); If(Abs(percent) > 90 | percent == 0, Insert Into(error_list,"The 백분율은 0에서 90% 사이여야 합니다. 수정하고 다시 시도하십시오."); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"p0은 0에서 0.90 사이여야 합니다. 수정하고 다시 시도하십시오."); ); If(N Items(error_list) > 0, nw = New Window( "오류!", <
eval expr()을 제거할 수 있어야 한다고 생각합니다. 출력 만하면 평가됩니다. Eval(출력)을 수행할 수도 있습니다.EvalExpr은 동적 표현식을 만드는 데 더 적합합니다.다음은 스크립팅 인덱스의 일부입니다.
EvalExpr은 x 내의 각 Expr() 절이 평가된 값으로 대체된 표현식의 복사본을 반환합니다.
그래서
Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ); // returns Length("X12")
당신이 그것을 평가하고 싶다면 당신은해야
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
하지만 당신은 내 생각에 표현식을 평가하려고 할 뿐이므로 아마도 evaexpr()이 필요하지 않을 것입니다.