Regex für Dateinamen mit schlechten DatenstandardsHallo,
Ich habe gerade einen großartigen Vortrag auf dem Discovery Summit 2023 in Sitges über Regex gesehen und mich gefragt, ob diese Funktion verwendet werden könnte, um Schlüsselvariablen aus meinen Dateinamen zu extrahieren, die ich mit dem PDF-Import-Assistenten in JMP erhalte. Das Problem besteht darin, dass die Dateinamen von mehreren Betreibern erstellt werden und es keinen gemeinsamen Standard gibt. Normalerweise nutze ich nur die Neucodierungsfunktion und eine allgemeine Bereinigung, um herauszubekommen, was ich brauche, aber das ist sehr zeitaufwändig, insbesondere wenn ich mehr als 100 PDFs pro Woche in JMP importiere.
Hier ist ein Beispielskript, das Ihnen zeigt, wie meine Daten aussehen. Die Schlüsselvariablen, die ich extrahieren möchte, sind „Produkttyp“, „Chargennummer“ und „Verpackungsprobe“. Im Vortrag wurde erwähnt, dass ein anderer JMP-Benutzer ein ähnliches Problem hatte und ein Skript erstellt wurde, um die benötigten Daten abzurufen. Ich bin kein JSL-Experte und würde daher gerne Hilfe bei diesem Problem erhalten, weiß aber, dass es möglicherweise zu komplex für eine Automatisierung ist, da es so viele Inkonsistenzen in den Dateinamen gibt. Jede Hilfe/jeder Rat wäre großartig! Beste Grüße, 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"}
)
)
)
DatenzugriffBetreff: Regex für Dateinamen mit schlechten DatenstandardsVielen Dank an @brady_brady Und @vince_faller . Diese Lösungen funktionieren perfekt und werden mir so viel Zeit sparen!! Danke euch beiden
Betreff: Regex für Dateinamen mit schlechten DatenstandardsWie die Lösung von Vince zeigt, löst Regex dieses Problem schnell und ist definitiv die bevorzugte Methode zur Behandlung eines solchen Problems.
Regex gehört jedoch zu den Dingen, die man nicht über Nacht lernen kann ... Sie lernen es (und wenn Sie wie ich sind, lernen Sie es NEU) in kleinen Stücken, während Sie es verwenden.
Wenn Sie Regex erlernen, lernen Sie unbedingt, wie Sie Zeichenfolgen mit den Befehlen replacement ( ) und items ( ) manipulieren und wie Sie Listen mit den Befehlen sort list ( ) und concat items ( ) manipulieren. Diese Befehle sind nicht so leistungsstark wie Regex und auch nicht so flexibel. Aber es ist überraschend, was man mit ihnen machen kann, und ihre Einfachheit macht sie leicht zu verstehen und zu merken. Stellen Sie sich vor, dass sie zusammen mit Funktionen wie Eval Insert () das „80/20“ an Funktionalität/Benutzerfreundlichkeit erreichen. Es lohnt sich, sie zu lernen.
Führen Sie zur Veranschaulichung den folgenden Code für die von Ihnen bereitgestellte Datentabelle aus und untersuchen Sie die vier dadurch erstellten Spalten.
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( "," ) );
Betreff: Regex für Dateinamen mit schlechten DatenstandardsIch denke, das hat dich getroffen.
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" )));