Je rencontre un problème pour obtenir la saisie de l'utilisateur et la transformer en variable. Le script que j'essaie d'utiliser pour cela est collé sous ce paragraphe. J'ai exécuté le même script plusieurs fois et sans le modifier, j'obtiens deux résultats différents dans le journal. Ce script est le suivant :
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);
Le premier résultat du journal est ce que j'attends du script et est copié et collé entre guillemets ci-dessous :
"
lowlim = 19 janvier 2015 ;
uplim = 18 janvier 2017 ;
"
L'autre réponse que je reçois du journal (encore une fois, sans modifier du tout le script) est la suivante :
"
référence d'objet supprimé : str2 << obtenir le texte lors de l'accès ou de l'évaluation de 'Glue' , Names Default To Here ( 1 ); /*###*/Effacer le journal(); /*###*/
Fermer tout (journaux, pas de sauvegarde) ; /*###*/Close All(tableaux de données, pas de sauvegarde); /*###*/
defuplim = Format( Aujourd'hui(), "ddMonyyyy" ); /*###*/deflowlim =
Format( Aujourd'hui() - En jours( 730 ), "ddMonyyyy" ); /*###*/
Nouvelle fenêtre( "Choisissez vos dates au format ddMonyyyy",
<
<
Zone de liste V (
Zone de texte( "Date de début :" ),
str1 = Zone d'édition de texte ( deflowlim ),
Zone de texte( "Date de fin :" ),
str2 = Zone d'édition de texte (defuplim)
),
H Zone de liste (zone de boutons ("OK"), zone de boutons ("Annuler") )
); /*###*/lowlim = str1 << obtenir le texte ; /*###*/uplim = str2 << obtenir le texte ; /*###*/lowlim
= Informat( lowlim ); /*###*/uplim = Informat( uplim ); /*###*/Show( lowlim ); /*###*/
Afficher( uplim ) /*###*/;
Dans le script suivant, erreur marquée par /*###*/
Noms par défaut ici ( 1 ); /*###*/Effacer le journal(); /*###*/
Fermer tout (journaux, pas de sauvegarde) ; /*###*/Close All(tableaux de données, pas de sauvegarde); /*###*/
defuplim = Format( Aujourd'hui(), "ddMonyyyy" ); /*###*/deflowlim =
Format( Aujourd'hui() - En jours( 730 ), "ddMonyyyy" ); /*###*/
Nouvelle fenêtre( "Choisissez vos dates au format ddMonyyyy",
<
<
Zone de liste V (
Zone de texte( "Date de début :" ),
str1 = Zone d'édition de texte ( deflowlim ),
Zone de texte( "Date de fin :" ),
str2 = Zone d'édition de texte (defuplim)
),
H Zone de liste (zone de boutons ("OK"), zone de boutons ("Annuler") )
); /*###*/lowlim = str1 << obtenir le texte ; /*###*/uplim = str2 << obtenir le texte ; /*###*/lowlim
= Informat( lowlim ); /*###*/uplim = Informat( uplim ); /*###*/Show( lowlim ); /*###*/
Afficher( uplim ) /*###*/;
"
J'ai désactivé et activé les quatre premières lignes, mais j'obtiens les mêmes résultats (un mélange de réponses), qu'elles soient activées ou non.
Avez-vous une idée de la cause de cette erreur ?
Il faut examiner une plus grande partie du code que ce que vous avez spécifié, afin de l'interpréter
deflowlim = Today() - In Days( 730 );
str1 = Number Edit Box(
deflowlim,
10,
<<SETFUNCTION></SETFUNCTION>
Ce qui se passe essentiellement ici, c'est la mise en place d'un champ de saisie de données pour permettre à l'utilisateur de saisir une date.Le type de champ de saisie de données est une zone d'édition de nombre (). (Voir la documentation et l'exemple de Number Edit Box() dans l'index des scripts sous le menu déroulant Aide).

La documentation indique que la forme de Number Edit Box() est :
y = Number Edit Box( initValue, <width> )
Une variable appelée "str1" est affectée comme pointeur vers la Number Edit Box(). Dans l'illustration, il s'agit de la variable "y"
La variable "deflowlim" est utilisée pour définir la valeur initiale à afficher dans la zone d'édition de numéro (). Dans l'illustration, il s'agit de la "initValue".
La largeur de la zone d'édition du numéro () est définie sur 10 caractères
Comme on peut le voir dans la liste de documentation ci-dessus, il existe un grand nombre de messages d'élément qui peuvent être transmis à l'objet Number Edit Box().Le message en question du code que vous demandez est "Set Function".Voici la liste du Scripting Index

Ce message fait, c'est configurer un morceau de JSL qui est exécuté chaque fois que quelque chose est modifié dans la zone d'édition de numéro ().
lowlim = str1 << get
Ainsi, chaque fois que quelque chose est modifié dans la Number Edit Box(), un message « get » est transmis à « str1 », qui est la Number Edit Box().
Le message "obtenir" est :

Returns the number currently entered in the edit box
et le numéro renvoyé est affecté à la variable "lowlim".
Par conséquent, "lowlim" est une variable scalaire, qui peut être référencée dans les JSL suivants.Seule une variable scalaire doit être attribuée, puisque les dates JMP sont stockées sous forme de valeur de données numérique continue.
J'espère que cela clarifie votre (vos) question (s).
Nouveau sur jmp et essayant de comprendre comment fonctionne cette séquence - quelqu'un pourrait-il expliquer comment fonctionne cet aspect du code ? On dirait qu'il enregistre l'entrée de la boîte dans une variable locale sans avoir besoin de sortir les résultats de la zone de texte dans un tableau, mais je ne sais pas comment la fonction fonctionne pour y parvenir.
<<SETFUNCTION></SETFUNCTION>
Le script de txnelson est une meilleure façon de gérer les dates, et il résout également le problème principal que vous rencontrez avec votre script en obtenant les valeurs dans les cases.
Dans votre script, vous créez une nouvelle fenêtre modale, mais essayez ensuite d'extraire des informations des zones d'affichage de la fenêtre après sa fermeture. Une fois qu'une fenêtre est fermée, vous ne pouvez plus accéder à ce qu'elle contenait : elle n'existe plus. C'est pourquoi vous obtenez des erreurs de syntaxe pour lowlim = str1 << get text;
Cependant, vous y êtes presque : vous avez spécifié le résultat de retour pour la fenêtre modale, mais vous n'utilisez pas ce que vous en obtenez.
Sans apporter d'autres modifications (bien que la gestion des dates de txnelson soit meilleure), vous pouvez obtenir ce que vous voulez en attribuant la Nouvelle fenêtre à une variable, puis en obtenant ces valeurs (modifications ci-dessous en rouge) :
ww = New Window("Pick Your Dates in ddMonyyyy format",
<ww["str1"];
uplim = ww["str2"];
Essayez cette version... elle conserve la date sous forme numérique, ce qui correspond à la manière dont JMP préfère les gérer
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>