BewertungsausdruckIch versuche, den Benutzer dazu zu bringen, mehrere Variablen einzugeben. Sobald diese Variablen als in Ordnung erachtet werden, wechselt die Ok-Schaltfläche von ausgegraut zu aktiv. Ich habe das zum Laufen gebracht. Was ich nicht habe, ist der Eval Expr (Ausgänge). Dies ist nur eine einfache Sache, um sicherzustellen, dass dies funktioniert, bevor ich die Berechnungen durchführe. Wenn ich das Skript ausführe, ist hier ein Screenshot, die Schaltfläche OK ist ausgegraut:

Dann gebe ich plausible Werte ein und die OK-Schaltfläche zeigt aktiv an, nachdem ich auf die Eingaben zum Verifizieren geklickt habe:

Aber es führt meinen Ausdruck nicht aus und erstellt die Tabelle nicht. Was mache ich falsch? Ich verwende JMP 16.0 Pro. Wie ich schon sagte, habe ich etwas sehr Einfaches gemacht, wie zum Beispiel eine Tabelle zu erstellen, nur um sicherzustellen, dass mein Skript funktioniert, bevor ich tief in das eintauche, was ich wirklich brauche.
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>
Mac OSSkriptingRe: BewertungsausdruckIch denke, Sie sollten in der Lage sein, eval expr() einfach loszuwerden. Wenn Sie nur eine Ausgabe durchführen, wird sie evaluiert. Sie können auch einfach Eval (Ausgabe) ausführen.EvalExpr dient eher zum Erstellen dynamischer Ausdrücke.Hier ist das Bit aus dem Scripting-Index.
EvalExpr gibt eine Kopie des Ausdrucks zurück, wobei jede Expr()-Klausel innerhalb von x durch ihren ausgewerteten Wert ersetzt wird
So
Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ); // returns Length("X12")
Wenn Sie es bewerten wollten, müssten Sie es tun
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
aber Sie versuchen nur, einen Ausdruck auszuwerten, denke ich, also brauchen Sie wahrscheinlich nicht evalexpr()
Re: Eval-AusdruckVerschieben Sie den Ausgabeausdruck vor der Erstellung von w und erstellen Sie die Ausgabe, wenn die Schaltfläche OK gedrückt wird.
Mehr sehen...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> Und da Sie Modal verwenden, können Sie die neue Tabelle auch einfach erstellen, nachdem Modal geschlossen wurde, da das Skript die Ausführung nicht fortsetzt, bevor Modal geschlossen wurde.
Hier ist ein Beispiel, wie Sie den Code ein wenig umgestalten können, wenn Sie möchten (Sie können auch Min/Max-Werte mit << Set Minimum und << Set Maximum in das Number Edit Box "zwingen"). Auf diese Weise können Sie auch alle Fehlermeldungen im Überprüfungsschritt anzeigen, wenn Sie Folgendes möchten:
Mehr sehen...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>Bearbeiten:
Einige Optionen für die Verwendung von Anzeigeboxen:
Mehr sehen...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-AusdruckIch habe zuerst Eval (output) ausprobiert und es hat nicht funktioniert, also habe ich Eval expr() als zweites versucht. Ich habe die Ausgabe selbst versucht und es hat nicht funktioniert.