关闭所有数据表,但保留一个打开以供进一步分析大家好
这是该帖子的后续内容:
https://community.jmp.com/t5/Discussions/JSL-How-to-close-data-tables-after-analysis/mp/36739
但是,我在运行 JSL Debgger 时遇到了脚本错误。
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);该脚本运行良好,因为关闭了除 dt4 之外的所有表,但我收到一个错误,如 If 语句下附加的文件所示。 有谁知道这指的是什么?
该脚本运行良好并关闭除 dt4 之外的所有表,但是,在此之后扩展脚本时遇到问题。 我有一个图形生成器脚本要在此时为 dt4 表启动,但它不执行任何操作。 所以我想知道这里的错误是否正在停止脚本以继续执行后续步骤。
回复:关闭所有数据表,但保留一个打开以供进一步分析这是因为你 >= 0。没有数据表0
要么让它 >= 1 要么 >0
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 1, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);回复:关闭所有数据表,但保留一个打开以供进一步分析感谢您的建议。 我改变了方法,现在我关闭了脚本前面的数据表。 现在脚本实际上更快了。 谢谢
回复:关闭所有数据表,但保留一个打开以供进一步分析菲尔我也在想同样的事情。请务必注意,表名称不能重复,因此,如果您尝试创建一个名为“dt4”的新表,并且已经存在一个“dt4”表,JMP 会将其命名为“dt4 2”。表名不太可能是您所期望的,这是我认为上面的代码不是解决当前问题的糟糕方法的另一个原因。
我刚刚查看了原始帖子中链接的帖子。Uday 的代码更适合生产。不幸的是,OP正在使用txnelson的简化,这只是一个简化,也是他遇到所有问题的地方。
回复:关闭所有数据表,但保留一个打开以供进一步分析“dt4”是你的表的实际名称吗?听起来更有可能是您在脚本中为表定义的变量名称? 我认为您的脚本正在寻找表名称,即您在 JMP 表顶部看到的内容,例如“Big Class”:
这是脚本中使用的 Get Name() 函数的简单示例(来自脚本索引):
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Name();
Show( n );
顺便说一句,我可能错了,这就是你问题的原因!
回复:关闭所有数据表,但保留一个打开以进行进一步分析您的表可以是链接表。 请参见下面的示例。或者您的脚本有错误并且您意外地引用了错误的表。这很可能是因为您正在按名称查找表。
Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = dt1 << Summary(
Group( :height ),
Freq( "None" ),
Weight( "None" )
);
close(dt1, "nosave"); //closes both dt1 and dt2 since dt2 is dependant on dt1
无论哪种方式,上面的代码都是处理关闭表的糟糕方法。首先,您将关闭与脚本无关的表,这可能会让用户因为您关闭了他们正在处理的其他事情而生气。其次,将不需要的表留到最后关闭是对内存的低效利用。在使用后立即关闭表而不是等到脚本结束将是更好的做法/模式。如果整个脚本需要这些表,那么我建议您跟踪列表中的表,以便您只关闭与脚本相关的表。
回复:关闭所有数据表,但保留一个打开以进行进一步分析嗨乌代,
我已经更改了此设置,但在 JSL 调试器下仍然遇到相同的错误。
回复:关闭所有数据表,但保留一个打开以供进一步分析@ivomdb ,
如果您引用 JMP 不知道存在的数据表或没有用于访问该表的引用,通常会出现您看到的错误。 这种情况主要发生在数据表引用丢失或在引用之前已关闭时。
解决此问题的一种方法是执行以下操作。
您还应该尝试确保表不会过早关闭。
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
Current Data Table(Data Table(i)); // This should make the data table you are working with active and current
If( Contains( DontClose, Data Table( i ) << get name ),
Continue();
,
// else
Close( Data Table( i ), "No Save" );
)
);<BR />