come modificare la variabile in più JSL contemporaneamenteCIAO,
Uso include () per eseguire più JSL in ogni JSL che ho variabile "todaydate". Tuttavia, ora desidero eseguire tutti i JSL utilizzando include, ma modificare la data odierna su tutti i JSL in 03Jun2023. Come posso farlo?
dataoggi = Formato data( Oggi(), "ggmonioaaa" );
Stavo pensando:
dataoggi = "03giugno2023"; // questo sostituirà in tutto 10 jsl
include(jsl1);
include(jsl2);
.
.
.
include(jsl10);
Automazione e scriptingRi: come modificare la variabile in più JSL contemporaneamenteDovrai inserire "todaydate" in un NameSpace separato.Questo può essere un NameSpace creato da te oppure puoi utilizzare il NameSpace globale definito da un ":".Di seguito sono riportati 2 script.Esegui il primo script, quindi esegui il secondo e vedrai che la variabile globale NameSpace "a", indicata come "::a" è nota in entrambi gli script JSL.
Sceneggiatura 1
Names Default To Here( 1 );
a = 5;
::a = 7;
Sceneggiatura 2
Names Default To Here( 1 );
Try( Show( a ), Show( "a is not known" ) );
Show( ::a );
Ri: come modificare la variabile in più JSL contemporaneamenteScusa, sono un po' lento qui.
vuoi dire che dovrò cambiare il mio 10 jsl 's todaydate in ::todaydate? significa che tutte le date di oggi si verificano su righe diverse che utilizzate in tutti i 10jsl devono cambiare in ::todaydate?
Ri: come modificare la variabile in più JSL contemporaneamenteLa risposta breve è sì.Ti suggerisco di dedicare del tempo alla lettura della documentazione su NameSpaces.
L'unico altro modo che potrebbe essere utilizzato sarebbe eseguire sempre tutti i tuoi script nello spazio dei nomi globale.Il problema è che tutte le variabili saranno disponibili per tutti gli script, se una variabile denominata "X" viene modificata in uno script, verranno modificati anche tutti gli script che hanno una variabile denominata "X".
Quello che normalmente ho fatto è definire uno spazio dei nomi che dichiaro in tutti gli script.E quindi, posso controllare tutte le informazioni che voglio siano disponibili per tutti i miei script,
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;Ri: come modificare la variabile in più JSL contemporaneamenteEsistono molti modi diversi per gestirlo, ma dipende molto dai tuoi script.
Come viene definito todaydate negli altri tuoi script? Che tipo di script sono jsl1, jsl2...? Potresti creare funzioni/espressioni e chiamarle nel file jsl principale?
Quando si utilizza include, dovrebbe funzionare anche negli altri script a meno che non si sovrascriva quelli poiché le inclusioni sovrascriveranno le variabili come ha detto Jim, ma è possibile "proteggerle" utilizzando << New Context e << Names Default To Here in Include(). Questo ovviamente ti impedirà di utilizzare facilmente la stessa variabile in quegli script e l'utilizzo degli spazi dei nomi è una soluzione abbastanza semplice per risolvere questo problema.
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"));
Guida allo scripting contiene molte informazioni sullo scripting di JMP, di seguito sono riportati alcuni collegamenti relativi a questo argomento
Guida allo scripting > Metodi di programmazione > Concetti avanzati di programmazione > Includi uno script
Guida allo scripting > Metodi di programmazione > Scoping avanzato e spazi dei nomi
Guida di scripting > Metodi di programmazione > Concetti di programmazione avanzata > Funzioni avanzate
Guida allo scripting > JSL Building Blocks > Regole per la risoluzione dei nomi
Ricorda inoltre di vedere più argomenti premendo la freccia nella pagina della guida

o utilizzando il menu a sinistra

Ri: come modificare la variabile in più JSL contemporaneamenteGrazie mille per le informazioni. Questi sono nuovi per me e sicuramente aiuteranno nel mio lavoro.