BewertungsausdruckIch versuche, den Benutzer dazu zu bringen, mehrere Variablen einzugeben. Sobald diese Variablen als in Ordnung erachtet werden, wechselt die Schaltfläche „OK“ von ausgegraut zu aktiv. Ich habe das zum Laufen gebracht. Was bei mir nicht funktioniert, ist der Eval Expr (Ausgänge). Dies ist nur eine einfache Sache, um sicherzustellen, dass alles 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 Schaltfläche „OK“ wird als aktiv angezeigt, nachdem ich auf „Eingaben überprüfen“ geklickt habe:

Aber es führt nicht meinen Ausdruck aus und erstellt die Tabelle. Was mache ich falsch? Ich verwende JMP 16.0 Pro. Wie gesagt, ich habe etwas sehr Einfaches gemacht, wie zum Beispiel eine Tabelle erstellt, um sicherzustellen, dass mein Skript funktioniert, bevor ich mich eingehend mit dem befasse, 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>
Erweiterte statistische ModellierungAutomatisierung und SkripterstellungVerbraucher- und MarktforschungMac OSMassenanpassungQualitäts- und VerfahrenstechnikBetreff: BewertungsausdruckDanke schön! das hat perfekt funktioniert.
Betreff: BewertungsausdruckIch habe zuerst Eval (Ausgabe) ausprobiert und es hat nicht funktioniert, also habe ich es als zweites mit Eval expr() versucht. Ich habe versucht, die Ausgabe selbst durchzuführen, aber es hat nicht funktioniert.
Betreff: BewertungsausdruckVerschieben Sie den Ausgabeausdruck vor der Erstellung von w und erstellen Sie die Ausgabe, wenn die Schaltfläche „OK“ gedrückt wird.
Mehr sehen... 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 bei Bedarf ein wenig umgestalten können (Sie können Min-/Max-Werte auch mit << Set Minimum und << Set Maximum in das Zahlenbearbeitungsfeld „erzwingen“). Dadurch 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>Namen standardmäßig hier(0); Protokoll löschen(); validator = function({alpha, beta, N, percent, p0}, {Default Local}, //könnte auch ein Ausdruck sein, aber auf diese Weise vermeiden Sie die Erstellung unnötiger Variablen 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 muss dazwischen liegen 0 und 1, bitte korrigieren und erneut versuchen"); ); If(Abs(beta) >= 1 | beta == 0, Einfügen in(error_list,"Beta muss zwischen 0 und 1 liegen, bitte korrigieren und erneut versuchen" ); ); If(DOEN == 0, Insert Into(error_list,"N sollte 2\!U1D3A sein, keine Mittelpunkte oder Wiederholungen mit N einschließen, bitte korrigieren und erneut versuchen"); ); If(Abs(percent) > 90 | Prozent == 0, Einfügen in(error_list, „Der Prozentsatz muss zwischen 0 und 90 % liegen, bitte korrigieren und erneut versuchen“); ); If(Abs(p0) > 0,90 | p0 == 0, Einfügen Into(error_list,"Der p0 muss zwischen 0 und 0,90 liegen, bitte korrigieren und erneut versuchen"); ); If(N Items(error_list) > 0, nw = New Window( "Fehler!", <
Bearbeiten:
Einige Optionen für die Verwendung von Displayboxen:
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>Namen standardmäßig hier(0); Protokoll löschen(); 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 muss zwischen 0 und 1 liegen, bitte korrigieren und erneut versuchen"); ); If (Abs(beta) >= 1 | beta == 0, Einfügen in(error_list,"Beta muss zwischen 0 und 1 liegen, bitte korrigieren und erneut versuchen"); ); If(DOEN == 0, Einfügen in(error_list ,"N sollte 2\!U1D3A sein, keine Mittelpunkte oder Wiederholungen mit N einbeziehen, bitte korrigieren und erneut versuchen"); ); If(Abs(percent) > 90 | percent == 0, Insert Into(error_list,"The Prozent muss zwischen 0 und 90 % liegen, bitte korrigieren und erneut versuchen"); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"Der p0 muss zwischen 0 und 0.90 liegen, Bitte reparieren und erneut versuchen"); ); If(N Items(error_list) > 0, nw = New Window( "Error!", <
Betreff: BewertungsausdruckIch denke, Sie sollten in der Lage sein, eval expr() einfach loszuwerden. Wenn Sie nur eine Ausgabe durchführen, wird diese ausgewertet. Sie können auch einfach Eval(output) ausführen.EvalExpr dient eher der Erstellung dynamischer Ausdrücke.Hier ist der Teil aus dem Skriptindex.
EvalExpr gibt eine Kopie des Ausdrucks zurück, wobei jede Expr()-Klausel innerhalb von x durch ihren ausgewerteten Wert ersetzt wird
Also
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 meiner Meinung nach nur, einen Ausdruck auszuwerten, sodass Sie evalexpr() wahrscheinlich nicht benötigen.