Regex per nomi di file con standard di dati scadentiCiao,
Ho appena visto un bel discorso al Discovery Summit del 2023 a Sitges su Regex e mi chiedevo se questa funzione potesse essere utilizzata per estrarre le variabili chiave dai miei nomi di file che ottengo in JMP utilizzando l'Importazione guidata PDF. Il problema è che i nomi dei file sono creati da più operatori e non esiste uno standard comune. Di solito utilizzo solo la funzione di ricodifica e un po' di pulizia generale per ottenere ciò di cui ho bisogno, ma richiede molto tempo, soprattutto quando importo più di 100 PDF in JMP alla settimana.
Ecco uno script di esempio per mostrarti come sono i miei dati. Le variabili chiave che voglio estrarre sono "Tipo di prodotto", "Numero di lotto" e "Scatola campionata". Nel discorso è stato menzionato che un altro utente di JMP ha avuto un problema simile ed è stato creato uno script per estrarre i dati di cui ha bisogno. Non sono un esperto di JSL, quindi mi piacerebbe ricevere aiuto con questo problema, ma apprezzo che potrebbe essere troppo complesso da automatizzare poiché ci sono così tante incongruenze nei nomi dei file. Qualsiasi aiuto/consiglio sarebbe fantastico! Cordiali saluti 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"}
)
)
)
ScriptingRi: Regex per nomi di file con standard di dati scadentiPenso che questi ti abbiano colpito.
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" )));
Ri: Regex per nomi di file con standard di dati scadentiCome mostra la soluzione di Vince, Regex risolve rapidamente questo problema ed è sicuramente il metodo preferito per gestire un problema come questo.
Regex è una di quelle cose che non puoi imparare dall'oggi al domani però ... lo impari (e, se sei come me, lo impari di nuovo) a pezzetti mentre lo usi.
Mentre stai raccogliendo Regex, assicurati di imparare a manipolare le stringhe con i comandi replace ( ) e items ( ) e impara a manipolare gli elenchi con i comandi sort list ( ) e concat items ( ). Questi comandi non sono potenti come regex, né sono così flessibili. Ma è sorprendente quello che puoi fare con loro e la loro semplicità li rende facili da capire e ricordare. Pensa a loro come a "80/20" di funzionalità/facilità d'uso, insieme a funzioni come Eval Insert ( ). Vale la pena imparare.
A titolo illustrativo, esegui il codice seguente sulla tabella di dati che hai fornito ed esamina le 4 colonne che 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( "," ) );
Ri: Regex per nomi di file con standard di dati scadentiEnorme grazie a @brady_brady E @vince_faller . Queste soluzioni funzionano perfettamente e mi faranno risparmiare tanto tempo!! Grazie ad entrambi