複数のJSLの変数を一度に変更する方法やあ、
include() を使用して、変数「todaydate」を持つ各 JSL で複数の JSL を実行します。 ただし、ここでは include を使用してすべての JSL を実行したいと考えていますが、すべての JSL の todaydate を 03Jun2023 に変更します。 どうすればそれができるでしょうか?
todaydate = Format date( Today(), "ddmonyyyy" );
私が考えていた:
todaydate = "03Jun2023"; // これは 10 個の JSL をすべて置き換えます
インクルード(jsl1);
インクルード(jsl2);
。
。
。
インクルード(jsl10);
自動化とスクリプト作成Re: 複数のJSLの変数を一度に変更する方法「todaydate」を別の名前空間に配置する必要があります。これは、自分で作成した NameSpace にすることも、「:」で定義したグローバル NameSpace を使用することもできます。以下に 2 つのスクリプトを示します。最初のスクリプトを実行し、次に 2 番目のスクリプトを実行すると、「::a」として参照されるグローバル NameSpace 変数「a」が両方の JSL スクリプトで認識されていることがわかります。
スクリプト 1
Names Default To Here( 1 );
a = 5;
::a = 7;
スクリプト 2
Names Default To Here( 1 );
Try( Show( a ), Show( "a is not known" ) );
Show( ::a );
Re: 複数のJSLの変数を一度に変更する方法申し訳ありませんが、ここでは少し遅いです。
10 個の jsl の todaydate を ::todaydate に変更する必要があるという意味ですか?すべての10jslで使用されている異なる行で発生するすべてのtodaydateを::todaydateに変更する必要があるという意味ですか?
Re: 複数のJSLの変数を一度に変更する方法簡単に言うと「はい」です。時間をかけて NameSpaces に関するドキュメントを読むことをお勧めします。
他の唯一の方法は、すべてのスクリプトを常にグローバル名前空間で実行することです。問題は、すべての変数がすべてのスクリプトで使用できることです。つまり、1 つのスクリプトで「X」という名前の変数が変更されると、「X」という名前の変数を持つすべてのスクリプトも変更されることになります。
私が通常行っていることは、すべてのスクリプトで宣言する名前空間を定義することです。したがって、すべてのスクリプトで利用できるようにしたいすべての情報を制御できます。
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: 複数のJSLの変数を一度に変更する方法これを処理するにはさまざまな方法がありますが、スクリプトに大きく依存します。
他のスクリプトでは、todaydate はどのように定義されていますか? jsl1、jsl2... とはどのような種類のスクリプトですか? 関数/式を作成して、メインの jsl ファイルで呼び出すことはできますか?
インクルードを使用している場合、ジムが言ったようにインクルージョンは変数を上書きするため、上書きしない限り他のスクリプトでも機能するはずですが、Include() で << New Context と << Names Default To Here を使用することでそれらを「保護」できます。 もちろん、これにより、これらのスクリプトで同じ変数を簡単に使用できなくなります。これを修正するには、名前空間を使用するのが非常に簡単な解決策になります。
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"));
スクリプト ガイドには、JMP スクリプトに関する多くの情報が含まれています。以下に、このトピックに関連するいくつかのリンクを示します。
スクリプトガイド > プログラミング方法 > 高度なプログラミング概念 > スクリプトを含める
スクリプトガイド > プログラミング方法 > 高度なスコープ設定と名前空間
スクリプトガイド > プログラミング方法 > 高度なプログラミング概念 > 高度な関数
スクリプトガイド > JSL ビルディングブロック > 名前解決のルール
また、ヘルプ ページで矢印を押して、さらにトピックを参照してください。

または左側のメニューを使用してください

Re: 複数のJSLの変数を一度に変更する方法情報ありがとうございます。 これらは私にとって初めてのことであり、間違いなく私の仕事に役立つでしょう。