資料標準較差的檔案名稱的正規表示式你好呀,
我剛剛在錫切斯舉行的 2023 年探索峰會上看到了一場關於 Regex 的精彩演講,我想知道是否可以使用此函數從我使用 PDF 導入嚮導進入 JMP 的文件名中提取關鍵變量。 問題在於檔案名稱是由多個操作員創建的,並且沒有通用標準。 我通常只使用重新編碼功能和一些常規清理來獲取我需要的內容,但這非常耗時,尤其是當我每週將 100 多個 PDF 匯入 JMP 時。
這是一個範例腳本,向您展示我的資料是什麼樣的。 我要提取的關鍵變數是「產品類型」、「批次號碼」和「盒裝樣品」。 演講中提到,另一個 JMP 使用者也遇到了類似的問題,因此創建了一個腳本來提取他們需要的資料。 我不是 JSL 方面的專家,因此很想獲得有關此問題的一些幫助,但我意識到它可能太複雜而無法自動化,因為文件名中有很多不一致之處。 任何幫助/建議都會很棒! 最好的問候,艾莉西亞
New Table( "REGEX Function Filename Example",
Add Rows( 8 ),
New Column( "Source Table",
Character,
"Nominal",
Set Selected,
Set Values(
{
"TYPE-A Z012345 BOX 10 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-A Z012345 BOX 129 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-B Z012346 BOX12 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"Z012347 TYPEB BOX16 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPEC Z12347 BOX 103 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"BOX 14 TYPE-C Z012350 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-D Z012450 BOX 142 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPED Z12451 BOX7 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)"
}
)
),
New Column( "Product Type",
Character,
"Nominal",
Set Selected,
Set Values(
{"TYPE-A", "TYPE-A", "TYPE-B", "TYPE-B", "TYPE-C", "TYPE-C", "TYPE-D",
"TYPE-D"}
)
),
New Column( "Batch Number",
Character,
"Nominal",
Set Selected,
Set Values(
{"Z012345", "Z012345", "Z012346", "Z012347", "Z012347", "Z012350",
"Z012450", "Z012451"}
)
),
New Column( "Box Sampled",
Character,
"Nominal",
Set Selected,
Set Values(
{"BOX 10", "BOX 129", "BOX 12", "BOX 16", "BOX 103", "BOX 14", "BOX 142",
"BOX 7"}
)
)
)
資料存取回覆:資料標準較差的檔案名稱的正規表示式非常感謝@brady_brady和@vince_faller 。 這些解決方案非常有效,將節省我很多時間! 謝謝你們倆
回覆:資料標準較差的檔案名稱的正規表示式正如 Vince 的解決方案所示,Regex 可以快速解決這個問題,並且絕對是處理此類問題的首選方法。
正規表示式是你不可能一夜之間學會的東西之一......你在使用它時一點一點地學習它(並且,如果你像我一樣,重新學習它)。
當您學習 Regex 時,請務必學習如何使用 Replace ( ) 和 items ( ) 指令操作字串,並了解如何使用 sort list ( ) 和 concat items ( ) 指令操作清單。 這些指令不像正規表示式那麼強大,也不像正規表示式那麼靈活。 但是,您可以用它們做的事情令人驚訝,而且它們的簡單性使它們易於理解和記住。 將它們視為達到了功能/易用性的“80/20”,以及 Eval Insert ( ) 等功能。 他們非常值得學習。
作為說明,請針對您提供的資料表執行下面的程式碼,並檢查它所建立的 4 列。
dt = current data table ( );
dt << new column ( "lis", character,
formula(
concatItems(
sortList (
items( [1 3],
substitute(:source table,
" ", "",
"-", "",
"TYPE", ",TYPE-",
"BOX", ",BOX ",
"Z", ",Z",
"Impact", ","
),
","
)
),
","
)
)
);
dt << Text to Columns( columns( :lis ), Delimiters( "," ) );
回覆:資料標準較差的檔案名稱的正規表示式我想這些都擊中了你。
dt << New Column("MyProdType", character, formula(Regex( :Source Table, "TYPE-?(\w)", "TYPE-\1" )));
dt << New Column("MyBatchNum", character, formula(
v=Regex( :Source Table, "Z0{0,6}(\d{0,6})", "\1"); // getting just the non zero values
"Z"||repeat("0", 6-length(v))||v
));
dt << New Column("My Box", character, formula(Regex( :Source Table, "BOX ?(\d+)", "BOX \1" )));