Regex para nombres de archivo con estándares de datos deficientesHola,
Acabo de ver una gran charla en el Discovery Summit 2023 en Sitges sobre Regex y me preguntaba si esta función podría usarse para extraer variables clave de mis nombres de archivo que ingreso a JMP usando el Asistente de importación de PDF. El problema es que los nombres de archivo son creados por múltiples operadores y no existe un estándar común. Por lo general, solo uso la función de recodificación y un poco de limpieza general para obtener lo que necesito, pero requiere mucho tiempo, especialmente cuando importo más de 100 archivos PDF a JMP por semana.
Aquí hay un script de ejemplo para mostrarle cómo se ven mis datos. Las variables clave que quiero extraer son "Tipo de producto", "Número de lote" y "Caja muestreada". Se mencionó en la charla que otro usuario de JMP tuvo un problema similar y se creó un script para extraer los datos que necesitan. No soy un experto en JSL, por lo que me encantaría obtener ayuda con este problema, pero agradezco que pueda ser demasiado complejo para automatizar, ya que hay muchas inconsistencias en los nombres de archivo. ¡Cualquier ayuda/consejo sería increíble! Saludos, Alicia
New Table( "REGEX Function Filename Example",
Add Rows( 8 ),
New Column( "Source Table",
Character,
"Nominal",
Set Selected,
Set Values(
{
"TYPE-A Z012345 BOX 10 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-A Z012345 BOX 129 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-B Z012346 BOX12 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"Z012347 TYPEB BOX16 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPEC Z12347 BOX 103 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"BOX 14 TYPE-C Z012350 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-D Z012450 BOX 142 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPED Z12451 BOX7 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)"
}
)
),
New Column( "Product Type",
Character,
"Nominal",
Set Selected,
Set Values(
{"TYPE-A", "TYPE-A", "TYPE-B", "TYPE-B", "TYPE-C", "TYPE-C", "TYPE-D",
"TYPE-D"}
)
),
New Column( "Batch Number",
Character,
"Nominal",
Set Selected,
Set Values(
{"Z012345", "Z012345", "Z012346", "Z012347", "Z012347", "Z012350",
"Z012450", "Z012451"}
)
),
New Column( "Box Sampled",
Character,
"Nominal",
Set Selected,
Set Values(
{"BOX 10", "BOX 129", "BOX 12", "BOX 16", "BOX 103", "BOX 14", "BOX 142",
"BOX 7"}
)
)
)
secuencias de comandosRe: Regex para nombres de archivo con estándares de datos deficientesCreo que estos te golpean.
dt << New Column("MyProdType", character, formula(Regex( :Source Table, "TYPE-?(\w)", "TYPE-\1" )));
dt << New Column("MyBatchNum", character, formula(
v=Regex( :Source Table, "Z0{0,6}(\d{0,6})", "\1"); // getting just the non zero values
"Z"||repeat("0", 6-length(v))||v
));
dt << New Column("My Box", character, formula(Regex( :Source Table, "BOX ?(\d+)", "BOX \1" )));
Re: Regex para nombres de archivo con estándares de datos deficientesComo muestra la solución de Vince, Regex soluciona rápidamente este problema y es definitivamente el método preferido para manejar un problema como este.
Sin embargo, Regex es una de esas cosas que no puedes aprender de la noche a la mañana... lo aprendes (y, si eres como yo, lo vuelves a aprender) poco a poco a medida que lo usas.
Mientras selecciona Regex, asegúrese de aprender a manipular cadenas con los comandos de sustitución ( ) y elementos ( ), y aprenda a manipular listas con los comandos ordenar lista ( ) y concatenar elementos ( ). Estos comandos no son tan poderosos como las expresiones regulares, ni son tan flexibles. Pero, es sorprendente lo que puedes hacer con ellos, y su sencillez los hace fáciles de entender y recordar. Piense en ellos como alcanzando el "80/20" de funcionalidad/facilidad de uso, junto con funciones como Eval Insert ( ). Vale la pena aprenderlos.
Como ilustración de esto, ejecute el siguiente código con la tabla de datos que proporcionó y examine las 4 columnas que crea.
dt = current data table ( );
dt << new column ( "lis", character,
formula(
concatItems(
sortList (
items( [1 3],
substitute(:source table,
" ", "",
"-", "",
"TYPE", ",TYPE-",
"BOX", ",BOX ",
"Z", ",Z",
"Impact", ","
),
","
)
),
","
)
)
);
dt << Text to Columns( columns( :lis ), Delimiters( "," ) );
Re: Regex para nombres de archivo con estándares de datos deficientesMuchas gracias a @brady_brady y @vince_faller . ¡Estas soluciones funcionan perfectamente y me ahorrarán mucho tiempo! Gracias a los dos