Bonjour,
J'ai une table JSL importée depuis une station de test.
La station rapporte les métriques et certains attributs, y compris le code de configuration des appareils testés.
Mon objectif est de joindre une autre table (matrice de configuration) avec des informations catégorielles (fournisseur de composants, …), en fonction du code de configuration.
Malheureusement, le code de configuration signalé par la station ne correspond pas à 100 % à la matrice de configuration (sensible à la casse, lettre manquante, « - » supplémentaire,…)
J'aimerais trouver un moyen robuste de les faire correspondre, et je pense que la fonction Regex est la meilleure, mais je suis un peu dépassé.
J'ai vérifié de nombreux messages sur ce forum parlant de cette fonction, mais je n'ai pas encore trouvé de cas d'utilisation suffisamment proche du mien pour me permettre de démarrer.
Merci d'avance pour votre aide
- Prédicateur
Ci-dessous un exemple de 2 colonnes à faire correspondre, j'ai utilisé une troisième colonne pour supprimer le "-" avec substitute(), et une 4ème colonne pour comparer mais la correspondance est toujours faible dans la plupart des cas.

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" ) )
)
)
À moins que vous ne puissiez spécifier toutes les règles à suivre, je suggérerais d'utiliser quelque chose comme la fonction Choisir le plus proche (ou le script d'édition le plus court). Cet article peut peut-être donner quelques idées. Écrire la fonction « Grouper les valeurs similaires » dans la plateforme Recode avec JSL .
Je me trompe peut-être sur ce que vous essayez de faire, mais c'est une version simplifiée de ce qui pourrait être fait
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();
Salut Jarmo,
merci beaucoup pour vos retours,
J'ai essayé ce morceau de script sur un ensemble de données plus grand et il semble être suffisamment précis, il correspond à plus de 96 % du temps.
J'ai ajouté « Replace Unmatched( 1 ), Unmatched (value= "NoMatch" ) » aux arguments de Choose Closest() pour m'assurer qu'il signale lorsqu'il n'y a pas de correspondance.
J'apprécie encore une fois votre aide:)
Prédicateur