資料表:訊息列是否存在(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;
列是否遵循某些特定的命名?確實需要遵循名稱以字母字元或下劃線開頭,但空格對於列確實很重要(有時)。也許問題(如果有的話)只是列引用的工作原理?