Hallo,
Ich habe eine JSL-Tabelle von einer Teststation importiert.
Die Station meldet die Metriken und einige Attribute, einschließlich des Konfigurationscodes der getesteten Geräte.
Mein Ziel besteht darin, basierend auf dem Konfigurationscode eine weitere Tabelle (Konfigurationsmatrix) mit einigen kategorischen Informationen (Komponentenanbieter usw.) zu verknüpfen.
Leider stimmt der von der Station gemeldete Konfigurationscode nicht 100% mit der Konfigurationsmatrix überein (Groß-/Kleinschreibung beachten, fehlender Buchstabe, zusätzliches „-“, …)
Ich würde gerne eine robuste Methode finden, sie abzugleichen, und ich denke, die Regex-Funktion ist die beste, aber ich bin ein bisschen überfordert.
Ich habe mir viele Beiträge in diesem Forum angesehen, in denen es um diese Funktion geht, habe aber noch keinen Anwendungsfall gefunden, der meinem nahe genug kommt, um damit anzufangen.
Vielen Dank im Voraus für Ihre Hilfe
- Prediger
Unten sehen Sie ein Beispiel mit 2 abzugleichenden Spalten. Ich habe eine dritte Spalte verwendet, um das „-“ mit substitute() zu entfernen, und eine vierte Spalte zum Vergleichen, aber die Übereinstimmung ist in den meisten Fällen immer noch schwach.

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" ) )
)
)
Sofern Sie nicht alle Regeln angeben können, die befolgt werden sollen, würde ich vorschlagen, etwas wie die Funktion „Choose Closest“ (oder das kürzeste Bearbeitungsskript) zu verwenden. Dieser Beitrag kann vielleicht einige Ideen liefern , wie Sie die Funktion „Group Similar Values“ (Ähnliche Werte gruppieren) in der Recode-Plattform mit JSL skripten können .
Ich kann mich irren, was Sie versuchen, aber dies ist eine vereinfachte Version dessen, was getan werden könnte
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();
Hallo Jarmo,
vielen Dank für Ihr Feedback,
Ich habe dieses Skriptstück mit einem größeren Datensatz ausprobiert und es scheint genau genug zu sein, es stimmt in >96 % der Fälle überein.
Ich habe den Argumenten von Choose Closest() die Option „Replace Unmatched( 1 ), Unmatched (value= "NoMatch" )“ hinzugefügt, um sicherzustellen, dass eine Markierung ausgegeben wird, wenn keine Übereinstimmung vorliegt.
Vielen Dank nochmal für Ihre Hilfe:)
Prediger