For 循环中列表中的数据表评估我在使用 For 循环重命名数据表的脚本中不断遇到错误。
这是我的脚本的简化版本
OldNames = {"Old Name 1", "Old Name 2", "Old Name 3"};
NewNames = {"New Name 1", "New Name 2", "New Name 3"};
For( i, i <= NNames, i++,
dt = Data Table( OldNames[i] );
dt << Set Name( NewNames[i] );
);
我不断收到以下错误
无法在“数据表”的访问或评估中找到数据表,数据表/*###*/( OldNames[i] )
但是,当我评估数据表(OldNames[1])时,没有错误!
自动化和脚本编写数据存取大规模定制回复:For 循环中列表中的数据表评估非常感谢。这是一个表名称和一个表是私有表的问题。
回复:For 循环中列表中的数据表评估@用户8421 ,
你运行成功了吗@jthi的剧本?如果是的话,那么我怀疑:
- 一张或多张桌子已关闭
- 一张或多张桌子是私有的
- 错误的旧名字。
下面稍微修改一下@jthi的脚本。 我将第三个表设为私有,并将 show 语句添加到 For 循环中。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt = Open("$SAMPLE_DATA/Quality Control/Failures3Delimited.jmp");
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp", "Private");
OldNames = {"Big Class", "Failures3Delimited", "Semiconductor Capability"};
NewNames = {"New Name 1", "New Name 2", "New Name 3"};
For(i = 1, i <= N Items(OldNames), i++,
show(i, OldNames[i], NewNames[i]);
dt = Data Table(OldNames[i]);
dt << Set Name(NewNames[i]);
);
这是日志输出
/*:
i = 1;
OldNames[i] = "Big Class";
NewNames[i] = "New Name 1";
i = 2;
OldNames[i] = "Failures3Delimited";
NewNames[i] = "New Name 2";
i = 3;
OldNames[i] = "Semiconductor Capability";
NewNames[i] = "New Name 3";
Cannot locate data table in access or evaluation of 'Data Table' , Data Table/*###*/(OldNames[i])
at line 11 in Script.jsl
《JMP 脚本编写指南》对于私有表规定:
- 当N Table()返回打开的数据表的数量时,私有表不被计算在内。
- 无法使用 Current Data Table() 将私有表设为最新。
这让我认为私有表可能不具有相同的功能,可能没有将名称存储在内存中,因为它不被计算在内。
祝你好运!
回复:For 循环中列表中的数据表评估抱歉,我意识到在简化时我确实错过了脚本的某些部分。
NNames = NItems(NewNames);
For 循环中的第一个参数 i=1。
即使在我的脚本中正确定义了这两个值,我仍然收到相同的错误消息
回复:For 循环中列表中的数据表评估您似乎至少缺少 i (i = 1) 的定义,而且我不确定 NNames 是什么。
这应该是工作示例:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt = Open("$SAMPLE_DATA/Quality Control/Failures3Delimited.jmp");
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
OldNames = {"Big Class", "Failures3Delimited", "Semiconductor Capability"};
NewNames = {"New Name 1", "New Name 2", "New Name 3"};
For(i = 1, i <= N Items(OldNames), i++,
dt = Data Table(OldNames[i]);
dt << Set Name(NewNames[i])
);回复:For 循环中列表中的数据表评估你好,
我相应地更改了 For 循环的前两个参数。现在应该可以工作了:
OldNames = {"Old Name 1", "Old Name 2", "Old Name 3"};
NewNames = {"New Name 1", "New Name 2", "New Name 3"};
For(
i=1,
i <= NItems(NewNames),
i++,
dt = Data Table(OldNames[i]);
dt << Set Name(NewNames[i])
);