Problem mit Benutzereingaben als VariableIch habe ein Problem damit, Benutzereingaben zu erhalten und sie in eine Variable umzuwandeln. Das Skript, das ich dafür zu verwenden versuche, ist unter diesem Absatz eingefügt. Ich habe dasselbe Skript mehrmals ausgeführt und ohne es zu bearbeiten, erhalte ich zwei unterschiedliche Ergebnisse im Protokoll. Dieses Skript lautet wie folgt:
names default to here(1);
clear log();
close all(journals, no save);
close all(data tables, no save);
defuplim = format(today(),"ddMonyyyy");
deflowlim = format(today() - in days(730), "ddMonyyyy");
New Window("Pick Your Dates in ddMonyyyy format",
<<Modal,
<<return result,
V List Box(
Text Box("Start Date:"),
str1=Text Edit Box(deflowlim),
text box("End Date:"),
str2=Text Edit Box(defuplim)
),
H List Box (Button Box ("OK"), Button Box ("Cancel"))
);
lowlim = str1 << get text;
uplim = str2 << get text;
lowlim=informat(lowlim);
uplim= informat(uplim);
show (lowlim);
show (uplim);
Das erste Ergebnis aus dem Protokoll ist das, was ich vom Skript erwarte und wird unten in Anführungszeichen kopiert und eingefügt:
„
lowlim = 19. Januar 2015;
uplim = 18. Januar 2017;
„
Die andere Antwort, die ich aus dem Protokoll bekomme (wiederum ohne das Skript überhaupt zu bearbeiten), ist diese:
„
gelöschte Objektreferenz: str2 << Text beim Zugriff oder bei der Auswertung von „Glue“ abrufen, Names Default To Here( 1 ); /*###*/Protokoll löschen(); /*###*/
Alle schließen (Journale, kein Speichern); /*###*/Alle schließen( Datentabellen, kein Speichern); /*###*/
defuplim = Format( Today(), "ddMonyyyy" ); /*###*/deflowlim =
Format( Today() - In Days( 730 ), "ddMonyyyy" ); /*###*/
Neues Fenster( „Wählen Sie Ihre Daten im Format ddMonyyyy“,
<
<
V-Listenfeld(
Textfeld( „Startdatum:“),
str1 = Textbearbeitungsfeld (deflowlim),
Textfeld( „Enddatum:“),
str2 = Textbearbeitungsfeld (defuplim)
),
H-Listenfeld (Schaltflächenfeld („OK“), Schaltflächenfeld („Abbrechen“))
); /*###*/lowlim = str1 << get text; /*###*/uplim = str2 << get text; /*###*/lowlim
= Informat( lowlim ); /*###*/uplim = Informat( uplim ); /*###*/Show( lowlim ); /*###*/
Show( uplim ) /*###*/;
Im folgenden Skript ist der Fehler mit /*###*/ markiert.
Namen standardmäßig hier( 1 ); /*###*/Protokoll löschen(); /*###*/
Alle schließen (Journale, kein Speichern); /*###*/Alle schließen( Datentabellen, kein Speichern); /*###*/
defuplim = Format( Today(), "ddMonyyyy" ); /*###*/deflowlim =
Format( Today() - In Days( 730 ), "ddMonyyyy" ); /*###*/
Neues Fenster( „Wählen Sie Ihre Daten im Format ddMonyyyy“,
<
<
V-Listenfeld(
Textfeld( „Startdatum:“),
str1 = Textbearbeitungsfeld (deflowlim),
Textfeld( „Enddatum:“),
str2 = Textbearbeitungsfeld (defuplim)
),
H-Listenfeld (Schaltflächenfeld („OK“), Schaltflächenfeld („Abbrechen“))
); /*###*/lowlim = str1 << get text; /*###*/uplim = str2 << get text; /*###*/lowlim
= Informat( lowlim ); /*###*/uplim = Informat( uplim ); /*###*/Show( lowlim ); /*###*/
Show( uplim ) /*###*/;
„
Ich habe die ersten vier Zeilen ein- und ausgeschaltet, erhalte jedoch die gleichen Ergebnisse (eine Mischung aus Antworten), unabhängig davon, ob sie ein- oder ausgeschaltet sind.
Irgendwelche Ideen, was diesen Fehler verursachen könnte?
Betreff: Problem mit Benutzereingaben als VariableVerstanden, das erklärt, warum das Entfernen der Set-Funktion dazu führte, dass Variablen als Null gespeichert wurden. Ohne die Set-Funktion wird es nicht bei jeder am Bearbeitungsfeld vorgenommenen Änderung aktualisiert. Vielen Dank für die ausführliche Erklärung!Betreff: Problem mit Benutzereingaben als VariableUm ihn zu interpretieren, muss man sich mehr Code ansehen, als Sie angegeben haben
deflowlim = Today() - In Days( 730 );
str1 = Number Edit Box(
deflowlim,
10,
<<SETFUNCTION></SETFUNCTION>
Hier geht es im Wesentlichen darum, ein Dateneingabefeld einzurichten, damit der Benutzer ein Datum eingeben kann.Der Typ des Dateneingabefelds ist ein Number Edit Box(). (Siehe Dokumentation und Beispiel für Number Edit Box() im Skriptindex im Pulldown-Menü „Hilfe“).

In der Dokumentation heißt es, dass die Form der Number Edit Box() wie folgt lautet:
y = Number Edit Box( initValue, <width> )
Eine Variable namens „str1“ wird als Zeiger auf die Number Edit Box() zugewiesen. In der Abbildung ist dies die Variable „y“.
Die Variable „deflowlim“ wird verwendet, um den Anfangswert festzulegen, der in der Number Edit Box() angezeigt werden soll. In der Abbildung ist dies der „initValue“.
Die Breite des Number Edit Box() ist auf 10 Zeichen eingestellt
Wie in der obigen Dokumentationsauflistung zu sehen ist, gibt es eine große Anzahl von Elementnachrichten, die an das Number Edit Box()-Objekt übergeben werden können.Die fragliche Nachricht aus dem Code, nach dem Sie fragen, lautet „Set Function“.Hier ist die Auflistung aus dem Scripting Index

Mit dieser Nachricht wird ein Teil der JSL eingerichtet, der immer dann ausgeführt wird, wenn in der Number Edit Box() etwas geändert wird.
lowlim = str1 << get
Jedes Mal, wenn sich also etwas in der Number Edit Box() ändert, wird eine „get“-Nachricht an „str1“ übergeben, was der Number Edit Box() entspricht.
Die „get“-Nachricht lautet:

Returns the number currently entered in the edit box
und die zurückgegebene Zahl wird der Variablen „lowlim“ zugewiesen.
Daher ist „lowlim“ eine Skalarvariable, auf die in nachfolgenden JSL verwiesen werden kann.Es muss nur eine Skalarvariable zugewiesen werden, da JMP-Daten als kontinuierlicher numerischer Datenwert gespeichert werden.
Ich hoffe, das klärt Ihre Frage(n).
Betreff: Problem mit Benutzereingaben als VariableIch bin neu bei jmp und versuche zu verstehen, wie diese Sequenz funktioniert. Könnte jemand erklären, wie dieser Aspekt des Codes funktioniert? Es sieht so aus, als würde es die Box-Eingabe in einer lokalen Variablen speichern, ohne dass Textbox-Ergebnisse in ein Array ausgegeben werden müssen, aber ich bin mir nicht sicher, wie die Funktion funktioniert, um dies zu erreichen.
<<SETFUNCTION></SETFUNCTION>
Betreff: Problem mit Benutzereingaben als VariableDanke, das war sehr hilfreich! Es ist sehr sinnvoll, das Datum numerisch zu halten und erfordert weniger Konvertierungen.
Betreff: Problem mit Benutzereingaben als VariableDas Skript von txnelson ist eine bessere Möglichkeit, mit Datumsangaben umzugehen, und es löst außerdem das Kernproblem, das Sie mit Ihrem Skript haben, indem es die Werte in den Feldern abruft.
In Ihrem Skript erstellen Sie ein modales neues Fenster, versuchen dann aber, Informationen aus den Anzeigefeldern im Fenster abzurufen, nachdem es geschlossen wurde. Sobald ein Fenster geschlossen ist, können Sie nicht mehr auf den darin enthaltenen Inhalt zugreifen – er existiert nicht mehr. Aus diesem Grund erhalten Sie Syntaxfehler für lowlim = str1 << get text;
Sie haben es jedoch fast geschafft – Sie haben das Rückgabeergebnis für das modale Fenster angegeben, verwenden aber nicht das, was Sie daraus erhalten.
Ohne weitere Änderungen vorzunehmen (obwohl die Datumsverarbeitung von txnelson besser ist), können Sie erhalten, was Sie wollen, indem Sie das neue Fenster einer Variablen zuweisen und dann diese Werte abrufen (Änderungen unten in Rot):
ww = New Window("Pick Your Dates in ddMonyyyy format",
<ww["str1"];
uplim = ww["str2"];
Betreff: Problem mit Benutzereingaben als VariableProbieren Sie diese Version aus. Sie behält das Datum als Zahl bei, wie JMP es bevorzugt
Names Default To Here( 1 );
Clear Log();
Close All( journals, no save );
Close All( data tables, no save );
defuplim = Today();
deflowlim = Today() - In Days( 730 );
New Window( "Pick Your Dates in ddMonyyyy format",
<<MODAL></MODAL>