wie man Variablen in mehreren JSLs gleichzeitig ändertHallo,
Ich verwende include(), um mehrere JSLs in jeder JSL auszuführen, in der ich die Variable „todaydate“ habe. Jetzt möchte ich jedoch alle JSLs mit include ausführen, aber das heutige Datum für alle JSLs auf den 03. Juni 2023 ändern. Wie kann ich das machen?
todaydate = Format date( Today(), "ddmonyyyy" );
Ich dachte:
todaydate = "03Jun2023"; // Dies wird in allen 10 JSL ersetzt
include(jsl1);
include(jsl2);
.
.
.
include(jsl10);
Automatisierung und SkripterstellungBetreff: So ändern Sie Variablen in mehreren JSLs gleichzeitigSie müssen das „todaydate“ in einem separaten NameSpace platzieren.Dies kann entweder ein von Ihnen erstellter NameSpace sein oder Sie können den durch ein „:“ definierten globalen NameSpace verwenden.Nachfolgend finden Sie zwei Skripte.Führen Sie das erste und dann das zweite Skript aus. Sie werden sehen, dass die globale NameSpace-Variable „a“, auf die als „::a“ verwiesen wird, in beiden JSL-Skripten bekannt ist.
Skript 1
Names Default To Here( 1 );
a = 5;
::a = 7;
Skript 2
Names Default To Here( 1 );
Try( Show( a ), Show( "a is not known" ) );
Show( ::a );
Betreff: So ändern Sie Variablen in mehreren JSLs gleichzeitigTut mir leid, ich bin hier etwas langsam.
Meinst du, ich muss das heutige Datum meiner 10 jsl in ::todaydate ändern? Bedeutet das, dass das gesamte heutige Datum in verschiedenen Zeilen auftritt, die in allen 10jsl verwendet werden und in ::todaydate geändert werden müssen?
Betreff: So ändern Sie Variablen in mehreren JSLs gleichzeitigDie kurze Antwort lautet: Ja.Ich empfehle Ihnen, sich die Zeit zu nehmen, die Dokumentation zu NameSpaces zu lesen.
Die einzige andere Möglichkeit wäre, alle Ihre Skripte immer im globalen Namespace auszuführen.Das Problem dabei ist, dass alle Variablen für alle Skripte verfügbar sind. Wenn also eine Variable mit dem Namen „X“ in einem Skript geändert wird, werden auch alle Skripte geändert, die eine Variable mit dem Namen „X“ haben.
Normalerweise habe ich einen Namensraum definiert, den ich in allen Skripten deklariere.Und daher kann ich alle Informationen steuern, die allen meinen Skripten zur Verfügung stehen sollen.
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;Betreff: So ändern Sie Variablen in mehreren JSLs gleichzeitigEs gibt viele verschiedene Möglichkeiten, wie Sie damit umgehen können, aber es hängt stark von Ihren Skripten ab.
Wie ist das heutige Datum in Ihren anderen Skripten definiert? Welche Art von Skripten sind jsl1, jsl2...? Könnten Sie Funktionen/Ausdrücke erstellen und sie in der JSL-Hauptdatei aufrufen?
Wenn Sie include verwenden, sollte es auch in den anderen Skripten funktionieren, es sei denn, Sie überschreiben diese, da Einschlüsse Variablen überschreiben, wie Jim sagte, aber Sie können sie „schützen“, indem Sie << New Context und << Names Default To Here in Include() verwenden. Dies verhindert dann natürlich, dass Sie in diesen Skripten problemlos dieselbe Variable verwenden können, und die Verwendung von Namespaces ist eine ziemlich einfache Lösung, um dieses Problem zu beheben.
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"));
Der Scripting Guide enthält zahlreiche Informationen zum JMP-Scripting. Nachfolgend finden Sie einige Links zu diesem Thema
Skripthandbuch > Programmiermethoden > Erweiterte Programmierkonzepte > Ein Skript einbinden
Skripthandbuch > Programmiermethoden > Erweitertes Scoping und Namespaces
Skripthandbuch > Programmiermethoden > Erweiterte Programmierkonzepte > Erweiterte Funktionen
Skripthandbuch > JSL-Bausteine > Regeln für die Namensauflösung
Denken Sie auch daran, weitere Themen anzuzeigen, indem Sie auf der Hilfeseite auf den Pfeil klicken

oder über das Menü auf der linken Seite

Betreff: So ändern Sie Variablen in mehreren JSLs gleichzeitigVielen Dank für die Informationen. Diese sind neu für mich und werden mir auf jeden Fall bei meiner Arbeit helfen.