Regex für Dateien in einem VerzeichnisHallo,
Ich versuche, ein Skript zu generieren, das eine Datei basierend auf einem Regex-Ausdruck öffnet (Datei beginnt mit „dat“). Mein Code ist unten aufgeführt und scheint nicht zu funktionieren. Muss bei der Verwendung von Regex in einer Liste etwas Besonderes beachtet werden?
dir = Verzeichnis auswählen();
Dateien = Dateien im Verzeichnis (Verzeichnis);
datafile = regex(files, "(^dat.*)","\1");
open(dir||datafile);
Betreff: Regex für Dateien in einem VerzeichnisWenn dieser Fall so einfach ist wie angegeben (alle Zieldateinamen beginnen mit „dat“), funktionieren beide Methoden und beide sind einfach zu verwenden. (Eine Methode zum Finden eines passenden Dateinamens basiert auf Zeichenfunktionen und die andere Methode auf regulären Ausdrücken.) Wenn der Fall tatsächlich nicht einfach ist oder mit der Zeit komplexer wird, kann der erste Ansatz schwieriger oder sogar schwieriger werden unmöglich. In diesem Fall wäre Regex ein überlegener Ansatz.
(Beachten Sie, dass JMP auch „Textmuster“ mit einer ganzen Reihe von Funktionen zum Erstellen und Verwenden von Mustern definiert.)
Ich glaube nicht, dass reguläre Ausdrücke frustrierend sind. Die Syntax von Regex ist einfach genug.Ich denke, dass die Verwendung von Regex oder einer ähnlichen Methode zum Auffinden von Zielmustern in realen Texten frustrierend ist. Aber das liegt an der Unordnung in den unstrukturierten Daten und nicht am Tool. Wenn Sie Text analysieren müssen, sind Kenntnisse und Fähigkeiten im Umgang mit Regex wertvoll.
Betreff: Regex für Dateien in einem VerzeichnisZusätzlich zu den vorherigen Lösungen möchten Sie wahrscheinlich mit den Datentabellen arbeiten, nachdem Sie sie mit der Funktion Open() importiert haben. Ich würde die Datentabellenverweise in einer anderen Liste erfassen. Ich werde die zweite Lösung als Beispiel verwenden, aber natürlich würde das Gleiche auch mit der ersten Lösung funktionieren.
Names Default to Here( 1 );
dir = Pick Directory();
files = Files in Directory( dir );
data files = List();
For( i = 1, i <= N Items( files ), i++,
If( !Is Missing( Regex( files[i], "^dat.*" ) ),
ref = Open(dir||files[i]);
Insert Into( data files, ref );
);
);
Betreff: Regex für Dateien in einem VerzeichnisHier ist eine Möglichkeit zur Implementierung @cwillden Lösung mit regex():
Names default to here( 1 );
dir = pick directory();
files = files in directory(dir);
for(i=1, i <= N Items(files), i++,
If(!Is missing(regex(files[i],"^dat.*")), //if first 3 letters of file name are "dat"
open(dir||files[i])
)
);
Betreff: Regex für Dateien in einem VerzeichnisIch fand reguläre Ausdrücke immer frustrierend, deshalb vermeide ich sie so weit wie möglich
.Ich könnte mich definitiv irren, aber ich glaube nicht, dass sie auf alle Elemente in einer Liste angewendet werden sollen.Die einfachste Lösung wäre wahrscheinlich, Ihre Dateien zu durchlaufen und alle Dateien zu löschen, die nicht mit „dat“ beginnen. Verwenden Sie so etwas:
for(i=1, i <= N Items(files), i++,
If(Substr(files[i],1,3)=="dat", //if first 3 letters of file name are "dat"
open(dir||files[i])
)
);