数据表:消息列是否存在(colname)?(:green_heart:)☐ 很酷的新功能
☑ 可以帮助很多用户!
☑ 删除“错误”
☐ 很高兴有
☐ 没人需要它
我的数据表中是否有列列名 ?
这是社区中最常问的问题之一:
https://community.jmp.com/t5/Discussions/Check-column-name-if-existing/mp/312011/highlight/true#M56...
https://community.jmp.com/t5/Discussions/How-to-check-if-list-of-columns-exist-and-report-those-that...
https://community.jmp.com/t5/Discussions/If-column-exists/td-p/348
https://community.jmp.com/t5/Discussions/how-to-creat-new-column-if-same-name-column-does-not-exist/...
https://community.jmp.com/t5/Discussions/Create-a-new-Row-column-only-if-it-does-not-exist/td-p/3091...
https://community.jmp.com/t5/Discussions/Determining-if-a-column-exists/mp/6268#M6267
https://community.jmp.com/t5/Discussions/Validate-column-name-exists-before-graphing/mp/5088#M5087
因此,目前的实施方式似乎还不够简单。
但它更有趣——并且蕴藏着很多危险。
不了解 JSL 命名约定相关障碍的用户很可能只会写
Contains( dt << Get Column Names(String), "age" )
进入他的代码。很简单……
但极其危险 - 参见:
https://community.jmp.com/t5/Discussions/check-if-column-exists/mp/572468
一些 JSL 脚本爱好者的奇怪讨论表明,上述语句确实适用于许多情况,但是:
一旦列名中出现空格、大写字母、特殊字符,就会失败。
为了防止用户使用这种危险的代码,最好“制度化”
- 即为用户提供一个简单的解决方案,自动解决所有陷阱。
我的愿望:
应该可以问一个数据表:
dt << contains column("colname")
此功能可以解决所有陷阱:
- compare with exact match - or check match for as name("colname")<FONT face="arial,helvetica,sans-serif">,考虑空间</FONT>
- 区分或不区分小写/大写字母
- 处理特殊字符
好处:
- 社区中的问题较少
- 自动改进代码。
- 减少挫败感。
更多愿望由
自动化和脚本回复:数据表:消息列存在(列名)?谢谢 :)
回复:数据表:消息列存在(列名)? - 状态更改为:是的,敬请期待!Development is exploring a solution: "桌面上有一条消息可以直接询问,例如dt << Has Column("age"),如果您想要精确匹配或名称(不区分空格和大小写)匹配,则可能可以选择给出不同的答案”。
更改为是,敬请期待。
回复:数据表<<列存在(“名称”)? - 状态更改为:正在调查回复:数据表<<列存在(“名称”)?感谢@hogi和@jthi的评论。将状态更改为调查。
回复:数据表<<列存在(“名称”)? - 状态更改为:已确认嗨@hogi ,感谢您的建议!我们已收到您的请求并将予以考虑。
回复:数据表<<列存在(“名称”)?让 JMP 了解这些列名称是相同还是不同可能会更好?这当然可能会破坏一些东西,所以可能不太容易实现。
这里有点令人困惑:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt:age << set name("a g e");
dt:age[1] = 999;
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
dt << New Column("age", Numeric, Ordinal);
Show(Column Name(2) == Column Name(6)); // Column Name(2) == Column Name(6) = 1; // Columns don't need unique names?
Show(Column(dt, "age")); //Column(dt, "age") = Column("age");
dt:age[1] = 9999;
Show(dt:age[1]); //dt:age[1] = 9999;
wait(1);
dt << Delete Column("age");
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
列是否遵循某些特定的命名?确实需要遵循名称以字母字符或下划线开头,但空格对于列确实很重要(有时)。也许问题(如果有的话)只是列引用的工作原理?