Ciao,
Ho una tabella JSL importata da una stazione di prova.
La stazione riporta le metriche e alcuni attributi, tra cui il codice di configurazione dei dispositivi sottoposti a test.
Il mio obiettivo è quello di unire un'altra tabella (matrice di configurazione) con alcune informazioni categoriali (fornitore del componente, ecc.), in base al codice di configurazione.
Sfortunatamente il codice di configurazione riportato dalla stazione non corrisponde al 100% con la matrice di configurazione (sensibile alle maiuscole/minuscole, lettera mancante, “-“ in più,…)
Vorrei trovare un modo efficace per abbinarli e penso che la funzione Regex sia la migliore, ma sono un po' confuso.
Ho letto molti post su questo forum che parlavano di questa funzione, ma non ho ancora trovato un caso d'uso abbastanza vicino al mio da cui iniziare.
Grazie in anticipo per il tuo aiuto
- Predicatore
Di seguito è riportato un esempio di 2 colonne da confrontare; ho utilizzato una terza colonna per rimuovere "-" con substitute() e una quarta colonna per effettuare il confronto, ma la corrispondenza è ancora debole nella maggior parte dei casi.

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" ) )
)
)
A meno che tu non possa specificare tutte le regole che dovrebbero essere seguite, ti suggerisco di usare qualcosa come la funzione Choose Closest (o Shortest Edit Script). Questo post può forse darti qualche idea. Script della funzione "Group Similar Values" nella piattaforma Recode con JSL .
Potrei sbagliarmi su ciò che stai cercando di fare, ma questa è una versione semplificata di ciò che potrebbe essere fatto
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();
Ciao Jarmo,
Grazie mille per il tuo feedback,
Ho provato questo pezzo di script su un set di dati più ampio e sembra sufficientemente accurato: corrisponde in >96% dei casi.
Ho aggiunto "Replace Unmatched( 1 ), Unmatched (value= "NoMatch" )" agli argomenti di Choose Closest() per assicurarmi che venga segnalato quando non c'è corrispondenza.
Apprezzo ancora una volta il tuo aiuto:)
Predicatore