如何强制我的脚本按顺序执行?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我当前的 JSL 脚本在单步执行时工作得很好,但是在执行时可能会抛出一些错误。我可以通过放入 wait() 函数来解决这个问题,但它并不总是有效。是否有一个简单的函数可以在脚本顶部调用以使其按顺序执行?
回复:如何强制我的脚本按顺序执行?嗯,显然它并不像我希望的那么乐观。 某些代码在 onclose() 命令中无法正确执行。'dt << sort(...)' 在内部 onclose() 中没有正确出现,但如果我将内部 onclose() 注释掉,它就可以正常工作。
回复:如何强制我的脚本按顺序执行?谢谢回复。 我尝试设置为函数,但它仍然不等待用户输入。对于重新编码和值排序问题,我很熟悉它们,但我应该更加重视运行它们(或任何本机函数),因为莫代尔我希望在进入下一行代码之前可以以这样的方式执行来完成该功能。
我明白你所说的关于使用 jsl 直接重新编码的内容,但我希望 jsl + 本机 UI 的混合来运行一堆与其他任务始终相同的常见任务(硬编码脚本很好)其输入/输出发生变化,因此适合本机 UI,例如值排序和重新编码。 我发现Craige 三月份的帖子他在其中发布了可以执行此操作的内容,但由于列名 -> 函数窗口命名而受到一些限制。 就我而言,我会将字符串中的列名称放在顶部,所以这对我来说很好。 这里它被修改为 2 个级别的交互性。 根据 JMP13 标准进行测试。
dt = Open( "$sample_data/big class.jmp" );
dt << Go To( :sex ) << Recode; // First interactivity, as a test, change "F" to "Female"
Window( "Recode" ) << onclose(
dt << Go To( :sex );
main menu("column info"); // second interactivity, as a test, change value ordering properties.
Window( "sex" ) << onclose(
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
);
);回复:如何强制我的脚本按顺序执行?当我编写相当复杂的脚本时,我通常对代码使用以下结构:
Main = Expr(
returna = A(passing variables);
returnb = B(passing variables);
);
A = Function({Passed variables},
processing code
);
B = Function({Passed variables},
processing code
);
// Enter the script by executing the Main section
Main;
关于您关于重新编码和列信息项目的问题,答案是“否”和“是”。 没有直接函数可以从交互式 JMP 运行重新编码元素。 这是因为在开放 JSL 中复制功能更容易。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt:Sex[ dt << Get Rows Where( :Sex == "F" )] = "Female";
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
// or
For Each Row(
If( :Sex == "F", :Sex = "Female",
:Sex = "Male"
);
对于列信息对话框中的项目,格式、列属性(例如值排序、规格限制等)都可以在 JSL 中更改为需要更改的内容。
所有这些都包含在脚本指南中
帮助==>书籍==>脚本指南
和/或在脚本索引中
帮助==>脚本索引
回复:如何强制我的脚本按顺序执行?
@tx尼尔森写道:
我使用的方法是将脚本分解为功能组件,然后让脚本的控制部分逐步执行脚本,并在需要时调用组件。我通常将代码放入 EXPR(() 部分。EXPR() 中的代码只有在被控制部分调用后才会被执行。
当您说在需要时调用组件时,您的意思是调用控制部分中的表达式并直接运行它,还是必须手动单独调用它们才能完成前一个函数? 如果是前者,控制部分的结构如何才能真正等待?
有没有办法将重新编码和列信息(以更改值顺序)等本机函数调用为模式窗口/函数?
谢谢,
麦克风
回复:如何强制我的脚本按顺序执行?最佳实践是向数据表传递要运行哪个平台的消息,而不必跟踪哪个表是当前活动表。所以而不是:
dt = 数据表(“数据表xxx”);
dt << 清除选择;
dt<<将窗口置于前面;
双变量(X(......
dt = 数据表(“数据表xxx”);
dt << 双变量(X(.........
确保双变量平台将在“dt”引用的数据表上运行
回复:如何强制我的脚本按顺序执行?自动运行脚本时我遇到了几个错误,但是当我手动测试它们时,一切正常。
对于这些类型的错误,当我尝试根据错误的表进行绘图时,通常会发生这种情况
现在我在脚本中绘制绘图/图表之前添加这些行
dt = 数据表(“数据表xxx”);
dt << 清除选择;
dt<<将窗口置于前面;
回复:如何强制我的脚本按顺序执行?得知您在这里遇到麻烦,我感到很遗憾。
我们的目标是您永远不需要等待()为了让你的脚本运行。 我们确实知道,有时 UI 的各种元素(窗口、平台等)需要一段时间才能完全实例化,然后才能对 JSL 的其余部分做出适当的响应。 但是,我们希望在内部解决这些情况,因此您不必在 JSL 中担心它。
因此,当您遇到通过添加解决方案来解决的情况时等待()到您的代码中,请将它们提交到技术支持,这样我们就可以跟踪它们并解决它们。
谢谢!
-杰夫
回复:如何强制我的脚本按顺序执行?我放等待(0);我想要顺序执行的代码段之间的语句。
回复:如何强制我的脚本按顺序执行?我使用的方法是将脚本分解为功能组件,然后让脚本的控制部分逐步执行脚本,并在需要时调用组件。我通常将代码放入 EXPR(() 部分。EXPR() 中的代码只有在被控制部分调用后才会被执行。