データ標準が不十分なファイル名の正規表現こんにちは、
シッチェスで開催された 2023 Discovery Summit で 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"}
)
)
)
スクリプティングRe: データ標準が不十分なファイル名の正規表現これらはあなたを襲ったと思います。
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" )));
Re: データ標準が不十分なファイル名の正規表現Vince のソリューションが示すように、Regex はこの問題を迅速に処理し、このような問題を処理するための推奨される方法であることは間違いありません。
正規表現は一朝一夕には学べないものの 1 つです。使用するにつれて少しずつ学習します (そして、私のようであれば再学習します)。
正規表現を習得している間に、substitute ( ) コマンドと items ( ) コマンドを使用して文字列を操作する方法と、sort list ( ) コマンドと concat items ( ) コマンドを使用してリストを操作する方法を必ず学んでください。 これらのコマンドは正規表現ほど強力ではなく、柔軟でもありません。 しかし、それらを使って何ができるかは驚くべきことであり、それらの単純さは理解しやすく、覚えやすいものです。 それらは、Eval Insert ( ) などの機能とともに、機能性/使いやすさの「80/20」に達していると考えてください。 それらは学ぶ価値があります。
この例として、提供したデータ テーブルに対して以下のコードを実行し、作成された 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( "," ) );
Re: データ標準が不十分なファイル名の正規表現に多大な感謝@ブレイディ_ブレイディと@vince_faller . これらのソリューションは完璧に機能し、時間を大幅に節約できます!! あなたがた両方に感謝します