如何同时更改多个 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 中的变量非常感谢你提供的信息。 这些对我来说都是新的,肯定会对我的工作有所帮助。