你好,
我构建了一个执行数据分析的脚本,但需要各种用户输入进行配置。 在某些情况下,我想稍后执行类似的分析,但不需要重新输入所有设置。 主脚本已经可以读取现有变量并自动填充这些字段,因此如果我有某种方法来保存和导入这些默认值,我就会被设置。 我希望能够拥有多种不同的配置,而不需要编辑脚本本身来创建新的配置。
一个想法是保存一个包含一列变量名称和一列变量值的表,但这对于不同的变量类型(数字、字符串、列表)来说效果不佳。
一种更好的想法是将包含不同用例的默认设置的其他 .jsl 文件保存到共享命名空间中,然后在运行我的主脚本之前运行相关文件。 我希望能够从我的脚本中创建配置文件,而不是手动创建它们。
我发现了关于保存新 jsl 文件的另一篇文章。 https://community.jmp.com/t5/Discussions/how-do-you-create-a-new-script-file-from-jsl/td-p/34740
看起来我应该能够设置 JSL 引用,然后将变量的当前值替换为该引用,但 NameExpr 无法实现此目的。 字符串替换时不带引号,列表仅显示为 List,数字将被忽略。 是否有一些细微的改变可以使这项工作成功,或者有更好的方法来实现相同的目标?
谢谢!
names default to here (1);
//namespace for the shared variables
If( !Namespace Exists( "TestNS" ), New Namespace( "TestNS" ) );
//the variables I want to save for later
TestNS:a = 5;
TestNS:b = "text";
TestNS:c = {1,2,3,4};
TestNS:d = {"a","b","c","d"};
//set up script to save as JSL
script = JSL Quote(
TestNS:a = a_dv;
TestNS:b = b_dv;
TestNS:c = c_dv;
TestNS:d = d_dv;
);
//substitute the dummy values for the current values... this isn't working
substitute Into (script, expr(a_dv), nameexpr (TestNS:a));
substitute Into (script, expr(b_dv), nameexpr (TestNS:b));
substitute Into (script, expr(c_dv), nameexpr (TestNS:c));
substitute Into (script, expr(d_dv), nameexpr (TestNS:d));
show(script);
//save script for later use
Save Text File( "$downloads\MyScript.jsl", script );