使用正規表示式重新編碼多個列名稱
大家好!
我正在嘗試將正則表達式替換應用於 JSL 中的重新編碼列函數,以便腳本將遍歷所有列並將正則表達式應用於所有列(如果適用)。
這是我一直在測試的程式碼:
Names Default To Here(1);
dt = Current Data Table();
//Create list of columns to be recoded
ColN = dt << Get Column Names();
// Iterate over the list of columns and recode each one
For Each({listitem}, ColN,
dt << Recode Column(
As Column(listitem),
{Regex(_rcNow, "erm", "testtest", GLOBALREPLACE)},
Target Column(Column(listitem))
);
);我收到此錯誤:
名稱未解析:存取或評估 'LocalTime' 時的 LocalTime,LocalTime/*###*/
LocalTime 是我的資料集中 13 列中的第一列。
我將不勝感激任何幫助!
自動化和腳本編寫品質和工藝工程回覆:使用正規表示式重新編碼多個列名稱據我所知,重新編碼列名稱...以類似的方式工作,但它不會被記錄到動作記錄器中,並且您無法從中獲取腳本。 腳本索引中似乎也沒有提及它。

您可能必須建立循環並使用例如 Regex() 和 << 將名稱設為列。
Names Default To Here(1);
dt = New Table("test",
new column("erm")
);
wait(1); // for demo
For Each({col_name}, dt << Get Column Names("String"),
new_col_name = Regex(col_name, "erm", "testtest", GLOBALREPLACE);
Column(dt, col_name) << Set Name(new_col_name);
);
回覆:使用正規表示式重新編碼多個列名稱指定的清單不會執行清單中的任何元素。因此,編碼人員需要強制清單在傳遞給 JMP 之前完全展開。以下是處理該問題的一種方法
Names Default To Here( 1 );
dt = Current Data Table();
//Create list of columns to be recoded
ColN = dt << Get Column Names(string);
// Iterate over the list of columns and recode each one
For Each( {listitem}, ColN,show(listitem);
Eval(
Substitute(
Expr(
dt << Recode Column(
As Column( listitem ),
{Regex( __rcNow__, "erm", "testtest", GLOBALREPLACE )},
Target Column( Column( listitem ) )
)
),
Expr( __rcNow__ ), listitem
)
)
);回覆:使用正規表示式重新編碼多個列名稱我剛剛意識到我使用了重新編碼列而不是重命名列名稱的函數...
是否有專門的函數來重新編碼列名?還有另一種方法可以實現它嗎?