回覆:Column() vs As Column() vs datable:column vs dt:As name("column")關於 column() 和 as column() 之間區別的精彩影片教學:
最常見的 JSL 錯誤及其避免方法 (2020-US-30MP-571)
(從 5 分 18 秒開始)
舉個例子
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
有關
如何使用所有這些方法使 JSL 腳本能夠適應列名的變化?
在列名更改後,捕獲缺少列事件的錯誤處理功能怎麼樣 - 並帶有自動修復程式碼的選項。
想法:
如果缺少某列,JMP 不會顯示錯誤訊息,而是會開啟一個帶有列列表的視窗來選擇正確的列。
然後程式碼就可以繼續執行 - 並且原始碼可以自動修復。
編輯:直接連結到視頻
https://community.jmp.com/t5/Abstracts/Most-Common-JSL-Mistakes-and-How-to-Avoid-Them-2020-US-30MP-571/ev-p/758506/redirect_from_archived_papage/true1
[上方的連結並非在每個瀏覽器中都顯示]
回复:Column() vs As Column() vs datatable:column vs dt:As name("column")最好的參考(除了我自己的經驗和大量的試驗和錯誤之外)來自腳本索引:


幫助頁面是其他地方列(- ,“名稱”,“格式化”)和
作為列(名稱) . 這也有一些信息腳本指南 > JSL 構建塊 > 名稱解析規則 > 有關名稱解析的常見問題解答和腳本指南 > 數據表 > 列 > 向數據列對象發送消息還迭代表中的行,所以基本上是文檔(尤其是腳本指南)。
回复:Column() vs As Column() vs datatable:column vs dt:As name("column")您能否在您的回答中包含一個解釋這一點的參考?
“作為 Column() “訪問”列 (這意味著什麼取決於情況...... )。”
回复:Column() vs As Column() vs datatable:column vs dt:As name("column")我通常不喜歡 +1 帖子,但是@jthi這與我為生產腳本所做的方法完全相同。我通常這樣想
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
col_name = "age";
show(ismissing(AsColumn(dt, col_name)) & ismissing(dt:age)); // these are both the same as far as I know
cols = dt << get column references; // these are the actual references
show(cols[2] == Column(dt, col_name)); // these are references
回复:Column() vs As Column() vs datatable:column vs dt:As name("column")這是一個有點長的帖子,到處跳來跳去,抱歉..
因為 Column()、Column()、:colname, ... 在 JSL 中並不簡單,使用哪個取決於具體情況。 我的首選方法是總是使用(除非我不能或者如果我想在腳本中看起來更清晰一些) Column(datatable_reference, "string of the name of the column"). :colname 確實有它的好處,有時可以用於腳本編寫者的好處(這裡提到了一些腳本指南 > JSL 構建塊 > 名稱解析規則 > 名稱解析規則在例外部分)。
我還喜歡使用列名字符串而不是 :colname 語法來避免可能到處發生的一些問題。 例如 << Get Column Names("String") 而不是 << Get Column Names() 然後如果需要我用 Column(string) 獲取引用。
列(- ,“名稱”,“格式化”)和
作為列(名稱)不一樣。 Column() 返回對列的引用,並且 As Column “訪問”列(這意味著什麼取決於情況......)。 當您第一次運行此腳本時,dt:timestamp 將返回缺失值,因為 Row() 尚未針對 JMP 的索引正確定義(它被初始化為 0)。
查看更多...
@ih關於如何管理列中的名稱更改有一些很好的建議。 此外,當將列插入到圖形生成器中時,您可以使用使用 Eval Insert、Eval Expr、Parse 和 Substitute 將一個表達式插入另一個表達式有時是 Eval()。 << Get Name 有時也很有用,或者使用 Filter Col Selector / Col List Box 構建用戶界面(例如@保丁建議)。
回复:Column() vs As Column() vs datatable:column vs dt:As name("column")怎麼會你知道腳本應該引用哪一列?如果您確實需要監視列名更改,您可以通過訂閱表中的更改並將這些列名記錄在某處來實現,但我認為這會非常複雜。您可以改為定義列屬性並蒐索它嗎?
從腳本指南訂閱示例:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {dtab, col, oldname},
Print( dtab << getname() );
Print( "new column name", (col << getname()) );
Print( "old name", oldname );
);
sub = dt << Subscribe( "", OnRenameColumn( f ) );
Column( dt, 1 ) << set name( "test" );
Wait( 1 );
dt << unsubscribe( sub, on rename column );
使用列屬性
Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt:height << Set Property( "My Script Identifier", X );
XVar = Filter Each({c}, dt << Get Column References,
ident = char(c << Get Property( "My Script Identifier" ));
if( is empty(ident), 0, ident == "X", 1, 0)
)[1];回复:Column() vs As Column() vs datatable:column vs dt:As name("column")通過數字 column(dt, 1) 索引列或提示用戶選擇列或輸入列名。 查看幫助文件中的 New Window()。
Column() vs As Column() vs datable:column vs dt:As name("column")JSL 有多種引用列的方法。 我們先打開一個數據表。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
現在我們創建一個具有類似內容的表腳本。
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
在自動化腳本(例如圖表)中,當用戶更改列名稱時,似乎會使腳本適應新的列名稱。 這在自定義 JSL 中失敗了,出現了類似 Index() 的內容。
如何使用所有這些方法使 JSL 腳本對列名更改具有魯棒性?
問候,
自動化和腳本編寫大規模定制回复:Column() vs As Column() vs datable:column vs dt:As name("column")這是願望:)
捕獲“缺少列”錯誤並提供選擇菜單
JSL Editor 現在應該很容易實現 - 因為 Jmp 17 的新工作流程構建器剛剛引入了類似的功能:
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idc-p/561663/highlight/true#M2949
回覆:Column() vs As Column() vs datable:column vs dt:As name("column")@brady_brady在Better JSL Smoother Migration: How To Fix Your Own Code @10min 中詳細討論了這個主題
編輯:
不幸的是,該視頻已被存檔。
https://community.jmp.com/t5/contentarchivals/contentarchivedpage/message-uid/537424#U537424
回覆:Column() vs As Column() vs datable:column vs dt:As name("column")令人驚奇的是儀表板重命名列後仍然有效
- 如果它儲存為表格腳本
編輯:
啊,不……如果儀表板/應用程式不儲存為表腳本,它甚至可以工作。
有趣的。
編輯2-局限性:
應用程式的 JSL「腳本」不會自動更新,只會更新應用程式後台的程式碼。

回覆:Column() vs As Column() vs datable:column vs dt:As name("column")你的意思是這樣的嗎?
執行程式碼後,TABLE SCRIPT 中的前兩個條目會自動變更為新名稱 *)
任何圖形等都有相同的行為:所有內容都會自動調整為新的列名稱。
非常酷!
但對於 As column() 和 Column() 來說它不起作用。
對於未儲存為表腳本的腳本中的任何列名也沒有這樣做...
回覆:Column() vs As Column() vs datable:column vs dt:As name("column")因為你的列名稱是數字,如果純英文字母不會出現這樣的狀況