如何在 JSL 中編寫查找和替換代碼,以從列中刪除文本並轉換為數字格式。您好 JMP 社區,
我每週一次導入帶有電池電壓列(名為“V1”)的 .txt 數據,其中行值可以是“3.45V”、“3.34V”、“3.12V”、“3.23V”等。 我手動使用查找和替換從數據中刪除字母“V”,然後手動將數據類型從字符更改為數字。 我想我不太明白如何在我的腳本中包含 substitute() 或 mumger() ,因為我已經嘗試並未能為這個簡單的任務創建一個有效的 JSL。
回复:如何在 JSL 中編寫查找和替換代碼,以從列中刪除文本並轉換為數字格式。我確實在我的代碼中發現了一個邏輯錯誤。下面是一個示例數據表,其中包含一個可以就地轉換值的小腳本。
Names Default To Here( 1 );
dt = New Table( "Example",
add rows( 100 ),
New Column( "col1", character, formula( Char( Random Integer( 78, 100 ) ) || "V" ) ),
New Column( "col2", character, formula( Char( Random Integer( 78, 100 ) ) || "V" ) )
);
dt<<RUN formulas=""></RUN>
回复:如何在 JSL 中編寫查找和替換代碼,以從列中刪除文本並轉換為數字格式。嗨,吉姆,您的代碼運行不正常,我不明白為什麼。 我已經上傳了帶有錯誤消息的 JMP 調試器的屏幕截圖,如果您想繼續解決這個問題,我還上傳了我的一部分數據。 我會對這種替代解決方案非常感興趣!

回复:如何在 JSL 中編寫查找和替換代碼,以從列中刪除文本並轉換為數字格式。謝謝,丹,
我能夠將其融入我的工作流程中:
Names Default To Here( 1 );
:Name( "V1" ) << Set Name( "orig V1" );
New Column( "V1",
Numeric,
"Continuous",
Format( "Fixed Dec", 6, 2 ),
Formula( Num( Word( 1, :orig V1, "V" ) ) )
);
感謝您的快速回复!
回复:如何在 JSL 中編寫查找和替換代碼,以從列中刪除文本並轉換為數字格式。看看這樣的東西是否會起作用......它尚未經過全面測試,但應該接近工作
Names Default To Here( 1 );
dt = Current Data Table();
colNames = dt << get column names( string, character );
For( theCol = 1, thecol <= N Items( colNames ), theCol++,
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
If( Right( Column( dt, theCol )[theRow], 1 ) == "V",
Column( dt, theCol )[theRow] = Substr(
Column( dt, theCol )[theRow],
1,
Length( Column( dt, theCol )[theRow] ) - 1
)
)
)
);
If( Is Missing( Num( Column( dt, theCol )[1] ) ) == 0,
Column( dt, theCol ) << data type( numeric ) << modeling type( continuous )
);回复:如何在 JSL 中編寫查找和替換代碼,以從列中刪除文本並轉換為數字格式。我一直熱衷於首先以交互方式生成解決方案,然後再編寫腳本。 我知道這並不總是可能的,但你可以接近。
打開文本文件會給出在帶有 JMP 表的源腳本中找到的這個腳本(當然,對於我的示例):
Open(
"C:\Testing.txt",
columns( New Column( "V1", Character, "Nominal" ) ),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
您可以根據具體情況根據需要進行修改。
現在為了刪除 V 並轉換為數字,我將為此創建第二列。 這允許在電壓格式因某種原因發生變化時進行錯誤檢查。 此外,它還提供了更好的數據可追溯性。 我用這個公式創建了一個列:Num( Word( 1, :V1, "V" ) )。 然後我查看了表格面板中的“複製表格腳本”,並提取了腳本的相關部分以創建新列。
在 JSL 中將是:
New Column( "Numeric V1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Num( Word( 1, :V1, "V" ) ) )
)
將兩者放在一起應該是您的腳本。