Regex pour les noms de fichiers avec des normes de données médiocresBonjour,
Je viens de voir une excellente conférence au Discovery Summit 2023 à Sitges sur Regex et je me suis demandé si cette fonction pouvait être utilisée pour extraire les variables clés de mes noms de fichiers que j'entre dans JMP à l'aide de l'assistant d'importation PDF. Le problème est que les noms de fichiers sont créés par plusieurs opérateurs et qu'il n'y a pas de norme commune. J'utilise généralement la fonction de recodage et un nettoyage général pour obtenir ce dont j'ai besoin, mais cela prend beaucoup de temps, surtout lorsque j'importe plus de 100 PDF dans JMP par semaine.
Voici un exemple de script pour vous montrer à quoi ressemblent mes données. Les variables clés que je souhaite extraire sont "Type de produit", "Numéro de lot" et "Boîte échantillonnée". Il a été mentionné dans la conférence qu'un autre utilisateur JMP avait un problème similaire et un script a été créé pour extraire les données dont il a besoin. Je ne suis pas un expert en JSL, j'aimerais donc obtenir de l'aide pour résoudre ce problème, mais j'apprécie qu'il soit peut-être trop complexe à automatiser car il y a tellement d'incohérences dans les noms de fichiers. Toute aide / conseil serait incroyable! Cordialement, 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"}
)
)
)
ScriptRe : Regex pour les noms de fichiers avec des normes de données médiocresJe pense que ça t'a frappé.
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 pour les noms de fichiers avec des normes de données médiocresComme le montre la solution de Vince, Regex résout rapidement ce problème et constitue certainement la méthode préférée pour gérer un problème comme celui-ci.
Regex est l'une de ces choses que vous ne pouvez pas apprendre du jour au lendemain ... vous l'apprenez (et, si vous êtes comme moi, réapprenez-le) par morceaux au fur et à mesure que vous l'utilisez.
Pendant que vous récupérez Regex, assurez-vous d'apprendre à manipuler des chaînes avec les commandes substitut ( ) et éléments ( ), et apprenez à manipuler des listes avec les commandes trier liste ( ) et concat éléments ( ). Ces commandes ne sont pas aussi puissantes que regex, ni aussi flexibles. Mais, il est surprenant de voir ce que vous pouvez en faire, et leur simplicité les rend faciles à comprendre et à mémoriser. Considérez-les comme atteignant le "80/20" de fonctionnalité/facilité d'utilisation, ainsi que des fonctions telles que Eval Insert ( ). Ils valent bien la peine d'être appris.
À titre d'illustration, exécutez le code ci-dessous sur le tableau de données que vous avez fourni et examinez les 4 colonnes qu'il crée.
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 pour les noms de fichiers avec des normes de données médiocresUn grand merci à @brady_brady et @vince_faller . Ces solutions fonctionnent parfaitement et me feront gagner tellement de temps !! Merci à vous deux