數據表:消息列存在(列名)?很酷的新功能
☑ 可以幫助很多用戶!
☑ 刪除“錯誤”
很高興擁有
無人需要它
有專欄嗎科名在我的數據表中?
這是社區中最常被問到的問題之一:
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")
這個函數可以解決所有的缺陷:
- 與完全匹配進行比較 - 或檢查匹配作為名稱(“colname”)<FONT face="arial,helvetica,sans-serif"> , 佔空間</FONT>
- 區分或不區分小寫/大寫字母
- 處理特殊字符
好處:
- 社區中的問題較少
- 自動更好的代碼。
- 減少挫敗感。
自動化和腳本編寫回复:數據表:消息列存在(列名)? - 狀態更改為:是的,敬請期待!開發正在探索解決方案:”桌面上有一條消息可以直接詢問,例如dt << 有列(“年齡”) ,如果您想要精確匹配或名稱(不區分空格和大小寫)匹配,則可能可以選擇給出不同的答案”。
更改為是,敬請期待。
回复:數據表<<列存在(“名稱”)? - 狀態更改為:正在調查回复:數據表<<列存在(“名稱”)?謝謝@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;
列是否遵循某些特定的命名? 請遵循名稱必須以字母字符或下劃線開頭,但空格(有時)對於列確實很重要。 也許問題(如果有的話)只是列引用的工作原理?