如何正确命名表?全部,
我知道如何为表设置名称。 但有时,如果该名称已经存在(偶然或在上次运行脚本后从左侧开始),则该名称将设置为“我的表 2”,而不是“我的表”。 如何正确地将其设置为我想要的设置?
我正在寻找执行此操作的一段代码 - 检查具有此名称的表是否存在,如果是,则关闭或重命名旧表,然后使用我要求的确切名称来命名此表。
我尝试了 Try() 函数,但我可能不完全理解它是如何工作的。 我尝试了一些复杂的 if() 语句,这些语句获取所有表的列表并迭代名称等。它太长,并且在大量表上速度显着减慢。
所以,我想知道,命名表的正确、常规方式是什么,以便您确定表的命名完全如此?
回复:如何正确命名表?我认为这种方法的唯一问题是......好吧,基本上你试图通过编写一个新函数来使 Set Name 使用起来更安全。 但在该函数中,您再次使用“设置名称”,这很容易出现您试图解决的相同问题......
但这对于您的直接表以及脚本本身来说应该不重要,所以我们在这里很好。
此时我可能只是关闭旧表而不保存它们。回复:如何正确命名表?是的,我就是这么做的。 我可能不完全理解 Try() 是如何工作的。 让我试试你的方法。回复:如何正确命名表?正如我提到的,我想避免拉出所有打开的表的列表。 当在一个脚本运行中生成数百个汇总表时,需要花费大量时间。回复:如何正确命名表?我确信不同的社区成员可能有多种不同的方法来解决这个问题。这似乎是一种非常简单的方法。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
xt = dt << subset( selected rows( 0 ), selected columns( 0 ) );
setName = Function( {tdt, Name},
{tdt, Name},
Try( Data Table( Name ) << set name( Name || "_Old" ) );
tdt << set name( name );
);
setName( xt, "big class" );回复:如何正确命名表?我不知道有什么传统的方法(除了避免已经使用的名称之外)。 我同意,在长时间正常运行后,跟踪所有打开的窗口可能会很困难。
这是执行您所描述的操作的一种 JSL 想法(在 JMP 14 中进行了测试)。 看来效率还是蛮高的。 为了始终在全局范围内可用,可以通过每次启动 JMP 时自动运行的启动脚本将函数添加为 Custom function()。
// Function for renaming data table if desired name is used by another open table
rename_if_exists = Function({s},
open_tables = Get Window List(Type("data tables")) << Get Window Title();
exists = Loc(open_tables, s)[1];
If(exists,
Data Table(open_tables[exists]) << set name(open_tables[exists] || "_old")
);
s;
);
// Apply...
dt = New Table(rename_if_exists("untitled 28972"), add rows(10));