如何正确命名表?全部,
我知道如何为表设置名称。 但是有时,如果该名称已经存在(偶然或在先前运行脚本后从左侧开始),则名称而不是设置“我的表”将设置为“我的表 2”。 如何正确地将其设置为我想要的设置?
我正在寻找执行此操作的代码片段 - 检查具有此名称的表是否存在,如果是,则关闭或重命名旧表,然后用我要求的确切名称命名此表。
我尝试了 Try() 函数,但我可能不完全理解它是如何工作的。 我尝试了一些复杂的 if() 语句来获取所有表的列表并遍历名称等。它太长了,并且在大量表上会显着减慢速度。
所以,我想知道,命名表的正确的传统方法是什么,以便您确定表的命名完全一样?
Re: 如何正确命名表?我看到的这种方法的唯一问题是......好吧,基本上你是在尝试通过编写一个新函数来使 Set Name 更安全地使用。 但是在该功能中,您再次使用 Set Name,这很容易出现您试图解决的相同问题......
但这对您的直接表和脚本本身都没有关系,所以我们在这里很好。
在这一点上,我可能只是关闭旧表而不保存它们。Re: 如何正确命名表?是的,这就是我试图接近它的方式。 我可能不完全理解 Try() 是如何工作的。 让我试试你的方法。Re: 如何正确命名表?正如我提到的,我想避免拉出所有打开的表的列表。 在一个脚本运行中生成数百个汇总表时,会花费大量时间。Re: 如何正确命名表?我相信不同的社区成员可能有各种不同的方式来解决这个问题。这似乎是一种非常简单的方法。
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" );Re: 如何正确命名表?我不知道传统的方式(除了避免使用已经使用的名称)。 我同意在长时间正常运行后跟踪所有打开的窗口可能很困难。
这是一个 JSL 想法来做你描述的事情(在 JMP 14 中测试)。 似乎效率很高。 为了始终全局可用,可以通过每次启动 JMP 时自动运行的启动脚本将该函数添加为自定义函数()。
// 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));