평가식사용자가 여러 변수를 입력하도록 하려고 합니다. 해당 변수가 정상으로 간주되면 확인 버튼이 회색에서 활성으로 바뀝니다. 나는 이것을 작동시켰다. 내가 작동하지 않는 것은 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>
맥 OS스크립팅Re: 평가식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 ) ) ) ));
하지만 당신은 단지 표현식을 평가하려고 하고 있으므로 아마도 evalexpr()이 필요하지 않을 것입니다
Re: 평가식w 생성 전에 출력 표현식을 이동하고 OK 버튼을 눌렀을 때 출력을 생성합니다.
더보기...Names Default To Here(0);
Clear Log();
output = Expr(
dt = New Table("Test Table", New Column("a", Set Values({alpha, beta, N, percent, p0})));
bb << click;
);
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),
write(); //not sure why this is needed here
);
)
),
bb = Button Box("OK", output, << enable(0))
)
)
);
Show(alpha);
Show(beta);
Show(DOEN);
Show(percent);
Show(p0);</MODAL></MODAL></MODAL></MODAL></MODAL> 그리고 모달을 사용하고 있기 때문에 모달이 닫히기 전에는 스크립트가 실행을 계속하지 않기 때문에 모달이 닫힌 후에 새 테이블을 생성할 수도 있습니다.
다음은 원하는 경우 코드를 약간 리팩토링할 수 있는 한 가지 예입니다(<< 최소 설정 및 << 최대 설정을 사용하여 최소/최대 값을 숫자 편집 상자에 "강제"할 수도 있음). 이렇게 하면 다음을 수행하려는 경우 확인 단계에서 모든 오류 메시지를 표시할 수도 있습니다.
더보기...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>편집하다:
디스플레이 상자 사용을 위한 몇 가지 옵션:
더보기...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>
Re: 평가식Eval(출력)을 먼저 시도했는데 작동하지 않아 Eval expr()을 두 번째로 시도했습니다. 자체적으로 출력을 시도했지만 작동하지 않았습니다.