JSL で同一でない文字列に基づいて 2 つのテーブルを結合する必要がある (正規表現を使用するか?)こんにちは、
テスター ステーションからインポートされた JSL テーブルがあります。
ステーションは、テスト対象デバイスの構成コードを含むメトリックといくつかの属性を報告します。
私の目標は、構成コードに基づいて、別のテーブル (構成マトリックス) をいくつかのカテゴリ情報 (コンポーネント ベンダーなど) と結合することです。
残念ながら、ステーションから報告された構成コードは、構成マトリックスと 100% 一致しません (大文字と小文字が区別される、文字が欠落している、余分な「-」など)。
これらを一致させるための堅牢な方法を見つけたいのですが、正規表現関数が最適だと思いますが、少し圧倒されています。
私はこのフォーラムでこの機能について話している多くの投稿をチェックしましたが、まだ私に近い使用例を見つけられず、始めることができません。
ご協力ありがとうございます
- 説教者
以下に、一致させる 2 つの列の例を示す。3 番目の列を使用して、substitute() で「-」を削除し、4 番目の列を使用して比較したが、ほとんどの場合、一致はまだ弱い。

New Table( "untitled 1",
Add Rows( 8 ),
New Column( "Tester config output",
Character,
"Nominal",
Set Values(
{"U4002LKR1B", "4005FGG1A", "U3001PL-2jR", "U5011G1A", "5001BLG1D",
"U5003R2A", "U4005BLG1B", "U6034UBLG2A"}
),
Set Display Width( 114 )
),
New Column( "config matrix name",
Character,
"Nominal",
Set Values(
{"U4002-LK-R1B", "U4005-FG-G1A", "U3001-PL-2JR", "U5011-G1A",
"U5001-BL-G1D", "U5003-R2A", "U4005-BL-G1B", "U6034-UBL-G2A"}
)
),
New Column( "Clean Config Matrix Name",
Character,
"Nominal",
Formula( Substitute( :config matrix name, "-", "" ) )
),
New Column( "Column 4",
Character,
"Nominal",
Formula( If( :Clean Config Matrix Name == :Tester config output, "Match" ) )
)
)
自動化とスクリプトRe: JSL で同一でない文字列に基づいて 2 つのテーブルを結合する必要がある (正規表現を使用するか?)従うべきすべてのルールを指定できない場合は、Choose Closest 関数 (または Shortest Edit Script) のようなものを使用することをお勧めします。この投稿には、Recode プラットフォームの「Group Similar Values」関数を JSL でスクリプト化するアイデアがいくつか記載されているかもしれません。
Re: JSL で同一でない文字列に基づいて 2 つのテーブルを結合する必要がある (正規表現を使用するか?)あなたがしようとしていることは間違っているかもしれませんが、これは実行可能なことの簡略版です
Names Default To Here(1);
dt1 = New Table("Output",
New Column("Tester config output",
Character,
"Nominal",
Set Values(
{"U4002LKR1B", "4005FGG1A", "U3001PL-2jR", "U5011G1A", "5001BLG1D", "U5003R2A",
"U4005BLG1B", "U6034UBLG2A"}
)
)
);
dt2 = New Table("Config",
New Column("config matrix name",
Character,
"Nominal",
Set Values(
{"U4002-LK-R1B", "U4005-FG-G1A", "U3001-PL-2JR", "U5011-G1A", "U5001-BL-G1D",
"U5003-R2A", "U4005-BL-G1B", "U6034-UBL-G2A"}
)
),
New Column("R", Numeric, Nominal, Set Values(1::8))
);
Summarize(dt2, groups = By(:config matrix name));
dt1 << new column("N", Character, Nominal);
For Each Row(dt1,
:N = Choose Closest(:Tester config output, groups, Ignore Case(1), Ignore Whitespace(1), Ignore Nonprintable(1), Max Edit Count(2), Max Edit Ratio(0.1));
);
dt1 << Update(
With(dt2),
Match Columns(:N = :config matrix name),
Replace Columns in Main Table(None)
);
Write();
Re: JSL で同一でない文字列に基づいて 2 つのテーブルを結合する必要がある (正規表現を使用するか?)こんにちは、ジャーモさん
フィードバックをありがとうございました。
このスクリプトをより大きなデータセットで試してみましたが、十分に正確で、96% 以上の確率で一致しました。
一致しない場合にフラグが立てられるように、Choose Closest() の引数に「Replace Unmatched( 1 ), Unmatched (value= "NoMatch" )」を追加しました。
改めてご協力に感謝いたします:)
説教者