comment changer de variable dans plusieurs JSL à la foisSalut,
J'utilise include() pour exécuter plusieurs JSL dans chaque JSL dont j'ai la variable "todaydate". Cependant, je souhaite maintenant exécuter toutes les JSL à l'aide d'include, mais modifier la date d'aujourd'hui dans toutes les JSL en 03Jun2023. Comment puis-je faire ça ?
dateaujourd'hui = Format date( Aujourd'hui(), "jjmonaaaa" );
Je pensais:
date d'aujourd'hui = "03juin2023" ; // cela remplacera en tout 10 jsl
inclure(jsl1);
inclure(jsl2);
.
.
.
inclure(jsl10);
Automatisation et scriptRe : comment modifier une variable dans plusieurs JSL à la foisVous devrez placer le "todaydate" dans un NameSpace séparé.Cela peut être soit un NameSpace que vous créez, soit vous pouvez utiliser le NameSpace global défini par un ":".Ci-dessous, 2 scripts.Exécutez le premier script, puis exécutez le second, et vous verrez que la variable globale NameSpace "a", référencée par "::a" est connue dans les deux scripts JSL.
Scénario 1
Names Default To Here( 1 );
a = 5;
::a = 7;
Scénario 2
Names Default To Here( 1 );
Try( Show( a ), Show( "a is not known" ) );
Show( ::a );
Re : comment modifier une variable dans plusieurs JSL à la foisDésolé, je suis un peu lent ici.
voulez-vous dire que je devrai changer la date d'aujourd'hui de mes 10 jsl en ::todaydate? cela signifie-t-il que toutes les dates d'aujourd'hui se produisent sur différentes lignes utilisées dans tous les 10jsl doivent être remplacées par ::todaydate ?
Re : comment modifier une variable dans plusieurs JSL à la foisLa reponse courte est oui.Je vous suggère de prendre le temps de lire la documentation sur les NameSpaces.
Le seul autre moyen qui pourrait être utilisé serait de toujours exécuter tous vos scripts dans l'espace de noms global.Le problème avec cela est que toutes les variables seront disponibles pour tous les scripts, si une variable nommée "X" est modifiée dans un script, tous les scripts qui ont une variable nommée "X" seront également modifiés.
Ce que j'ai fait normalement, c'est de définir un espace de noms que je déclare dans tous les scripts.Et donc, je peux contrôler toutes les informations que je veux rendre disponibles pour tous mes scripts,
names default to here(1);
if(isNamespace(nsCommon)==0,
nsCommon = New Namespace("CommonSpace")
);
// Set today's date in the nsCommon namespace
nsCommon:todaydate = Format date( Today(), "ddmonyyyy" );
// set the local-to-this-script todaydate variable to the
// value of the nsCommon value of todaydate.
todaydate = nsCommon:todaydate;Re : comment modifier une variable dans plusieurs JSL à la foisIl existe de nombreuses façons différentes de gérer cela, mais cela dépend beaucoup de vos scripts.
Comment la date d'aujourd'hui est-elle définie dans vos autres scripts ? Quels types de scripts sont jsl1, jsl2... ? Pourriez-vous créer des fonctions/expressions et les appeler dans le fichier jsl principal ?
Lorsque vous utilisez include, cela devrait également fonctionner dans les autres scripts, à moins que vous ne les écrasiez, car les inclusions écraseront les variables comme Jim l'a dit, mais vous pouvez les "protéger" en utilisant << New Context et << Names Default To Here in Include(). Cela vous empêchera bien sûr d'utiliser facilement la même variable dans ces scripts et l'utilisation d'espaces de noms est une solution assez simple pour résoudre ce problème.
Names Default To Here(1);
Clear Log();
todaydate = Format Date(Today(), "ddmonyyyy");
jsl1_str = "\[Names Default To Here(1);
Show(todaydate);
]\";
jsl2_str = "\[Names Default To Here(1);
todaydate = 1;
Show(todaydate);
]\";
Save Text File("$TEMP/661243_jsl1.jsl", jsl1_str);
Save Text File("$TEMP/661243_jsl2.jsl", jsl2_str);
Include("$TEMP/661243_jsl1.jsl");
Include("$TEMP/661243_jsl1.jsl", << New Context);
Include("$TEMP/661243_jsl1.jsl", << New Context, << Names Default To Here);
Include("$TEMP/661243_jsl2.jsl", << New Context);
show(todaydate); // not overwritten
Include("$TEMP/661243_jsl2.jsl", << New Context, << Names Default To Here);
show(todaydate); // not overwritten
Include("$TEMP/661243_jsl2.jsl");
show(todaydate); // overwritten
Try(Delete File("$TEMP/661243_jsl1.jsl"));
Try(Delete File("$TEMP/661243_jsl2.jsl"));
Le guide de script contient de nombreuses informations sur les scripts JMP. Vous trouverez ci-dessous quelques liens liés à ce sujet.
Guide de script > Méthodes de programmation > Concepts de programmation avancés > Inclure un script
Guide de script > Méthodes de programmation > Portée avancée et espaces de noms
Guide de script > Méthodes de programmation > Concepts de programmation avancés > Fonctions avancées
Guide de script > Blocs de construction JSL > Règles de résolution de noms
N'oubliez pas également de voir plus de sujets en appuyant sur la flèche dans la page d'aide

ou en utilisant le menu de gauche

Re : comment modifier une variable dans plusieurs JSL à la foisMerci beaucoup pour l'information. Ceux-ci sont nouveaux pour moi et m'aideront certainement dans mon travail.