Sto riscontrando un problema con l'acquisizione dell'input dell'utente e la sua trasformazione in una variabile. Lo script che sto tentando di utilizzare per questo è incollato sotto questo paragrafo. Ho eseguito lo stesso script più volte e senza modificarlo ottengo due risultati diversi nel registro. Questo script è il seguente:
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);
Il primo risultato dal registro è ciò che mi aspetto che lo script produca e viene copiato e incollato tra virgolette di seguito:
“
limite minimo = 19 gennaio 2015;
uplim = 18 gennaio 2017;
“
L'altra risposta che ricevo dal registro (di nuovo, senza modificare affatto lo script) è questa:
“
riferimento oggetto cancellato: str2 << ottieni testo nell'accesso o nella valutazione di 'Glue', Names Default To Here( 1 ); /*###*/Pulisci il registro(); /*###*/
Chiudi tutto (diari, nessun salvataggio); /*###*/Chiudi tutto (tabelle dati, nessun salvataggio); /*###*/
defuplim = Formato( Oggi(), "ddMonyyyy" ); /*###*/deflowlim =
Formato (Oggi() - In giorni (730), "ggMonyyyy"); /*###*/
Nuova finestra("Scegli le tue date nel formato ggLunedìaaa",
<
<
Casella di riepilogo V(
Casella di testo( "Data di inizio:" ),
str1 = Casella di modifica testo (deflowlim),
Casella di testo( "Data di fine:" ),
str2 = Casella di modifica testo (deuplim)
),
H Casella di riepilogo (Casella pulsanti ("OK"), Casella pulsanti ("Annulla"))
); /*###*/lowlim = str1 << ottieni testo; /*###*/uplim = str2 << ottieni testo; /*###*/lowlim
= Informazioni (limite basso); /*###*/uplim = Informa( uplim ); /*###*/Mostra(lowlim); /*###*/
Mostra( uplim ) /*###*/;
Nello script seguente, errore contrassegnato da /*###*/
Nomi predefiniti qui (1); /*###*/Pulisci il registro(); /*###*/
Chiudi tutto (diari, nessun salvataggio); /*###*/Chiudi tutto (tabelle dati, nessun salvataggio); /*###*/
defuplim = Formato( Oggi(), "ddMonyyyy" ); /*###*/deflowlim =
Formato (Oggi() - In giorni (730), "ggMonyyyy"); /*###*/
Nuova finestra("Scegli le tue date nel formato ggLunedìaaa",
<
<
Casella di riepilogo V(
Casella di testo( "Data di inizio:" ),
str1 = Casella di modifica testo (deflowlim),
Casella di testo( "Data di fine:" ),
str2 = Casella di modifica testo (deuplim)
),
H Casella di riepilogo (Casella pulsanti ("OK"), Casella pulsanti ("Annulla"))
); /*###*/lowlim = str1 << ottieni testo; /*###*/uplim = str2 << ottieni testo; /*###*/lowlim
= Informazioni (limite basso); /*###*/uplim = Informa( uplim ); /*###*/Mostra(lowlim); /*###*/
Mostra( uplim ) /*###*/;
“
Ho attivato e disattivato le prime quattro righe, ma ottengo gli stessi risultati (un mix di risposte) indipendentemente dal fatto che siano attivate o disattivate.
Qualche idea su cosa potrebbe causare questo errore?
È necessario esaminare più codice rispetto a quello specificato per interpretarlo
deflowlim = Today() - In Days( 730 );
str1 = Number Edit Box(
deflowlim,
10,
<<SETFUNCTION></SETFUNCTION>
Ciò che fondamentalmente sta succedendo qui è impostare un campo di immissione dati per consentire all'utente di inserire una data.Il tipo di campo di immissione dati è una casella di modifica numero(). (Vedi la documentazione e l'esempio di Number Edit Box() nell'Indice degli script nel menu a discesa Guida).

La documentazione afferma che la forma del Number Edit Box() è:
y = Number Edit Box( initValue, <width> )
Una variabile chiamata "str1" viene assegnata come puntatore al Number Edit Box(). Nell'illustrazione, questa è la variabile "y".
La variabile "deflowlim" viene utilizzata per impostare il valore iniziale da visualizzare nella casella di modifica numero(). Nell'illustrazione, questo è "initValue".
La larghezza della casella di modifica numero() è impostata su 10 caratteri
Come si può vedere nell'elenco della documentazione precedente, esiste un gran numero di messaggi di elemento che possono essere passati all'oggetto Number Edit Box().Il messaggio in questione dal codice che stai chiedendo è "Imposta funzione".Ecco l'elenco dallo Scripting Index

Ciò che fa questo messaggio è impostare una parte di JSL che viene eseguita ogni volta che viene modificato qualcosa nella casella di modifica numero().
lowlim = str1 << get
Quindi ogni volta che viene modificato qualcosa nella casella di modifica numero(), un messaggio "get" viene passato a "str1", che è la casella di modifica numero()
Il messaggio "get" è:

Returns the number currently entered in the edit box
e il numero restituito viene assegnato alla variabile "lowlim".
Pertanto, "lowlim" è una variabile scalare, a cui è possibile fare riferimento nel successivo JSL.È necessario assegnare solo una variabile scalare, poiché le date JMP vengono memorizzate come valore di dati numerici continui.
Spero che questo chiarisca le tue domande.
Nuovo in jmp e sto cercando di capire come funziona questa sequenza: qualcuno potrebbe spiegare come funziona questo aspetto del codice? Sembra che salvi l'input della casella in una variabile locale senza la necessità di inviare i risultati della casella di testo in un array, ma non è sicuro di come funzioni la funzione per ottenere ciò.
<<SETFUNCTION></SETFUNCTION>
Lo script di txnelson è un modo migliore per gestire le date, inoltre risolve anche il problema principale che stai riscontrando con il tuo script ottenendo i valori all'interno delle caselle.
Nel tuo script crei una nuova finestra modale, ma poi provi a ottenere informazioni dalle caselle di visualizzazione nella finestra dopo che è stata chiusa. Una volta chiusa una finestra, non puoi più accedere a ciò che contiene: non esiste più. Questo è il motivo per cui ricevi errori di sintassi per lowlim = str1 << get text;
Ci sei quasi, però: hai specificato il risultato di ritorno per la finestra modale, ma non stai utilizzando ciò che ottieni da essa.
Senza apportare altre modifiche (sebbene la gestione della data di txnelson sia migliore), puoi ottenere ciò che desideri assegnando la Nuova finestra a una variabile e quindi ottenendo quei valori (modifiche di seguito in rosso):
ww = New Window("Pick Your Dates in ddMonyyyy format",
<ww["str1"];
uplim = ww["str2"];
Prova questa versione....mantiene la data come valore numerico, che è il modo in cui JMP preferisce gestirla
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>