Hola,
Tengo una tabla JSL importada desde una estación de prueba.
La estación informa las métricas y algunos atributos, incluido el código de configuración de los dispositivos bajo prueba.
Mi objetivo es unir otra tabla (matriz de configuración) con información categórica (proveedor del componente, ...), basada en el código de configuración.
Lamentablemente, el código de configuración informado por la estación no coincide al 100% con la matriz de configuración (distingue entre mayúsculas y minúsculas, letras faltantes, “-“ extra,…)
Me gustaría encontrar una forma sólida de hacerlos coincidir, y creo que la función Regex es la mejor, pero estoy un poco abrumado.
Revisé muchas publicaciones en este foro que hablaban sobre esta función, pero aún no encontré un caso de uso lo suficientemente cercano al mío como para comenzar.
Gracias de antemano por su ayuda
- Predicador
A continuación se muestra un ejemplo de 2 columnas para hacer coincidir, utilicé una tercera columna para eliminar el "-" con replaced() y una cuarta columna para comparar, pero la coincidencia sigue siendo débil en la mayoría de los casos.

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 menos que puedas especificar todas las reglas que se deben seguir, te sugiero que uses algo como la función Elegir más cercano (o el script de edición más corto). Esta publicación puede darte algunas ideas. Crea un script para la función "Agrupar valores similares" en la plataforma Recode con JSL .
Puede que me equivoque sobre lo que estás intentando hacer, pero esta es una versión simplificada de lo que se podría hacer.
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();
Hola jarmo,
Muchas gracias por tus comentarios,
Probé este fragmento de secuencia de comandos en un conjunto de datos más grande y parece ser bastante preciso: coincide más del 96 % de las veces.
Agregué "Reemplazar no coincidente ( 1 ), no coincidente (valor = "NoMatch" )" a los argumentos de Elegir más cercano () para asegurarme de que se marque cuando no haya coincidencia.
Agradezco tu ayuda una vez más:)
Predicador