如何同時更改多個 JSL 中的變量你好,
我使用 include() 來運行多個 JSL,每個 JSL 都有變量“todaydate”。 但是,現在我想使用 include 運行所有 JSL,但將所有 JSL 的今日日期更改為 03Jun2023。 我怎樣才能做到這一點?
Todaydate = 格式化日期( Today(), "ddmonyyyy" );
我剛在想:
今天日期=“2023 年 6 月 3 日”; // 這將替換所有 10 個 jsl
包括(jsl1);
包括(jsl2);
。
。
。
包括(jsl10);
自動化和腳本編寫回复:如何同時更改多個 JSL 中的變量您需要將“todaydate”放入單獨的命名空間中。這可以是您創建的命名空間,也可以使用由“:”定義的全局命名空間。下面是2個腳本。運行第一個腳本,然後運行第二個腳本,您將看到全局命名空間變量“a”(引用為“::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 );
回复:如何同時更改多個 JSL 中的變量抱歉,我這裡有點慢。
您的意思是我必須將 10 jsl 的 Todaydate 更改為 ::todaydate 嗎?這是否意味著所有 10jsl 中使用的不同行中出現的所有 Todaydate 都必須更改為 ::todaydate?
回复:如何同時更改多個 JSL 中的變量簡短的回答是肯定的。我建議您花時間閱讀有關命名空間的文檔。
唯一可以使用的其他方法是始終在全局命名空間中運行所有腳本。這樣做的問題是,所有變量都可用於所有腳本,如果在一個腳本中更改名為“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;回复:如何同時更改多個 JSL 中的變量有很多不同的方法可以處理這個問題,但很大程度上取決於您的腳本。
你的其他腳本中今天日期是如何定義的? jsl1、jsl2...是什麼類型的腳本? 您可以創建函數/表達式並在主 jsl 文件中調用它們嗎?
當您使用 include 時,它也應該在其他腳本中工作,除非您覆蓋它,因為包含將覆蓋像 Jim 所說的變量,但您可以通過使用 << New Context 和 << Names Default To Here in Include() 來“保護”它們。 這當然會阻止您在這些腳本中輕鬆使用相同的變量,並且使用命名空間是解決此問題的相當簡單的解決方案。
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 構建塊 > 名稱解析規則
另請記住通過按幫助頁面中的箭頭查看更多主題

或使用左側菜單

回复:如何同時更改多個 JSL 中的變量非常感謝你提供的信息。 這些對我來說都是新的,肯定會對我的工作有所幫助。