Mehrere Dateiimport, DateifilterungHallo an alle,
JSL-Neuling hier! Ich muss mehrere Dateien importieren, wobei die importierten Dateinamen einige Parameter haben, die erfüllt sein müssen.
- Bestimmte Zeichen dürfen nicht enthalten sein.Diese Zeichen stehen immer am Ende des Dateinamens.
- Muss eine bestimmte Zeichenfolge enthalten
- Wenn in den gefundenen Dateinamen identische Zeichenfolgensegmente vorhanden sind, werden nur diejenigen mit dem neuesten Datums- und Zeitstempel des Systems importiert. Ich brauche eine Möglichkeit, Teile von Dateinamen zu zerlegen und zu vergleichen.
Beispiel: Ich möchte alle Frucht-Smoothie-Getränke mit „Apfel“, aber nicht mit „Tomate“. (Dateiname, Datum und Uhrzeit JJJJMMTT HHMM)
Kiwi_Apple_Mango.csv 20220125 1421
Apple_Grape_Kiwi.csv 20220125 1243
Durien_Tomato.csv 20220126 1607
Apple_Grape_Kiwi_Tomato.csv 20220126 1537
Mango_Banana_Durien.csv 20220126 0915
Grape_Pineapple_Apple_Avocado.csv 20220126 0711
Apple_Grape_Kiwi.csv 20220127 1111
Die Benennung der Dateien hat Struktur.Die gesuchte Zeichenfolge steht nach mehreren Trennzeichen.
Zusätzliche Fragen
- Gibt es Tipps, um die Suche nach diesen Dateien in einem Ordner zu beschleunigen, in dem viele tausend Dateien gespeichert sind?Ich kann nach der ersten Suche nur nach Erweiterung filtern. Derzeit dauert es viele Minuten, überhaupt alle Dateien in diesem Ordner zu suchen und zu finden.
- Irgendwelche Tipps zum Importieren einer wachsenden Anzahl von Dateien? Die Zahl der importierten Dateien wird in einigen Monaten voraussichtlich die 1000-Marke überschreiten.Alle haben die gleiche Datenstruktur.Mir ist bewusst, dass ich „Ähnliche Dateien stapeln“ muss.Das sind alles Datentabellen.
Ich habe nach den Funktionen Words und Munger gesucht, bin mir aber nicht sicher, ob sie das sind, was ich brauche, um das Dateiimportskript abzuschließen.
DatenzugriffWindowsBetreff: Mehrfachdateiimport, DateifilterungDanke schön!Das „Contains Item“ mit Pat Regex scheint den Zweck zu erfüllen!
Betreff: Mehrfachdateiimport, DateifilterungJa, aber es ist schwer zu sagen, welches für Sie am besten geeignet ist.
Möglicherweise können Sie „contains()“ verwenden und die _-Trennzeichen vollständig ignorieren. Ich weiß nicht, ob die Token Ananas Und Apfel sind ein Problem oder nicht, aber sie könnten ein Problem sein, da das eine das andere enthält. Traube Und Grapefruit zu. Vielleicht löst Groß-/Kleinschreibung das Problem?
Vielleicht möchten Sie mehr über Regex erfahren. (Ich benutzte reguläre-ausdrücke.info .) Diese Funktion gibt die Zeichenübereinstimmung oder einen fehlenden numerischen Wert zurück
regex("applepearorange","carrot|pear")
Sie können es mit isstring(...) oder ismissing(...) verwenden, um eine Wahr/Falsch-Antwort zu erhalten. Die | in der Regex steht für Alternativen.
Sie können auch einen regulären Ausdruck mit „contains_item()“ verwenden. Ich habe es nie verwendet, außer für diesen Schnelltest, und dies ist die einzige Möglichkeit, die ich gefunden habe, um ihm ein Muster zu geben:
Contains Item( "apple_grapefruit_lime", Pat Regex( "carrot|grape" ), "_" )
Das bedeutet, die Eingabe auf _ aufzuteilen und jedes Segment mit der Regex zu testen.
Betreff: Mehrfachdateiimport, DateifilterungIch habe meinen Code jetzt wie folgt geändert und er funktioniert, aber nicht optimal. „abc“ steht nicht immer allein und wird durch die Trennzeichen „_“ getrennt.Manchmal habe ich zum Beispiel „_xyzabc_“ oder „_abcxyz_“. Gibt es eine Funktion, die die gesamte Zeichenfolge durchläuft, um diesen Zeichensatz zu finden?Die Saite befindet sich immer an einer bestimmten Position innerhalb der Saite.
files_list = Files In Directory( "C:\Data\" );
dt = Current Data Table();
For( i = 1, i <= N Rows( dt ), i++,
if( Contains Item(:Column 1[i], "abc", "_") == 1,
dt <<DELETE row=""></DELETE>
Betreff: Mehrfachdateiimport, DateifilterungMir ist klar geworden, dass ein Teil des Problems in der Bedingung meiner if-Anweisung liegt, daher habe ich den Code unten geändert.Es wird immer fortgesetzt, es sei denn, ich bearbeite den Code, um nach der ersten Teilzeichenfolge des Ganzen zu suchen. Was ich suche, befindet sich innerhalb der Zeichenfolge, und wenn ich rückwärts oder vorwärts suche, ist es nicht das, wonach ich nur den Anfang oder das Ende der Zeichenfolge teste.
files_list = Files In Directory( "C:\Data\" );
dt = Current Data Table();
For( i = 1, i <= N Rows( dt ), i++,
if( contains(:Column 1[i], "abc") == 1,
dt <<DELETE row=""></DELETE>
Betreff: Mehrfachdateiimport, DateifilterungHallo, ich habe mit Files In Directory() erfolgreich eine Liste mit Dateinamen ausgefüllt.Ich habe Filter Each() untersucht, kann aber nicht so viele Bedingungen hinzufügen, wie ich möchte, daher versuche ich, einige bedingte If-Anweisungen zu verketten, die in einer For-Schleife verschachtelt sind. Im Hintergrund habe ich einen dt aller Dateinamen, einen in jeder Zeile, alle in einer einzigen Spalte.
Grundsätzlich möchte ich jedes Element mit !contains() oder contains() untersuchen und die Zeile entsprechend löschen oder behalten.Ja, mir ist bewusst, dass dies zu Problemen mit dem „i“-Zähler führen wird.Der Zähler lässt sich leicht verstellen. Allerdings Schritt für Schritt. Wenn ich dieses Skript ausführe, erscheint kein Fehler und es passiert nichts.Ich habe den Debugger überprüft und konnte keinen Zählertyp für enthält() finden, daher bin ich etwas verwirrt, warum das nicht funktioniert.Irgendwelche Erkenntnisse?
files_list = Files In Directory( "C:\Data\" );
dt = Current Data Table();
For( i = 1, i <= N Rows( dt ), i++,
if( :Column 1[i] == contains(:Column 1[i], "abc"),
dt <<DELETE row=""></DELETE>
Betreff: Mehrfachdateiimport, DateifilterungIch wollte nur sagen, dass ich auf diesen Thread zurückkomme. Im Moment muss ich mich auf etwas anderes bei der Arbeit konzentrieren. Ich habe es nicht vergessen.
Betreff: Mehrfachdateiimport, Dateifilterung(Aus der Quarantäne entfernt, sorry, ich hoffe, ich habe das Richtige ausgewählt, es ist nicht klar, warum es markiert wurde.)
enthält() ist eine Funktion, die Sie Element für Element für die Liste der von FilesInDirectory(...) zurückgegebenen Dateien verwenden können.
Sie können dem Filter Dateinamen übergeben, die wie folgt aussehen:
??Apfel*Birne*.csv
Jede ? entspricht 1 und jedes * entspricht 0 oder mehr.w9apple_fig_pear_grape.csv würde übereinstimmen.
Sie könnten wahrscheinlich so etwas verwenden
list = files in directory("$desktop",recursive(1));
list = filtereach({name},list,contains(name,".txt"));
namefilterdata = concatitems(list,";");
um den Wert zu erstellen, der an den MFI-Namensfilter übergeben werden soll.
Die <
Betreff: Mehrfachdateiimport, DateifilterungWenn ich „!Contains(part, „Tomato“)“ oder „Contains(part, „Apple“)“ hinzufüge, bleibt das Skript bei der Erkennung der Dateien in dem von mir gesuchten Ordner hängen. Der Datenimport findet eigentlich nie statt. Irgendwelche Gedanken darüber, warum das passiert?
Ich würde den Code hier kopieren, aber aus irgendeinem Grund wird er ständig als Spam gemeldet
Betreff: Mehrfachdateiimport, DateifilterungHallo jthi,
Sobald ich „Contains“ zum Skript hinzufüge, durchläuft es eine Schleife, um Dateien im Ordner zu finden, und importiert die Daten nie. Irgendwelche Tipps?
Multiple File Import(
<<SET folder=""></SET>
Betreff: Mehrfachdateiimport, DateifilterungVielen Dank für deine Antwort, jthi!Ich werde dies Anfang nächster Woche testen können und mich dann bei Ihnen melden.
Mehrere Dateiimport, DateifilterungZuerst würde ich eine Liste der Dateien erhalten. Dafür gibt es in JMP viele Methoden, und welche Sie verwenden sollten, hängt von Ihren Geschwindigkeitsanforderungen (und möglichen Datenanforderungen) ab.Um eine Liste der Dateien zu erhalten, die Sie verwenden können, können Sie Betriebssystembefehle verwenden (in der Windows-Befehlszeile gibt es z. B. dir und in Powershell). get-childitem (docs.microsoft.com) Um die Dateiliste zu erhalten, oder direkt mit JMP können Sie Files In Directory() oder Multiple File Import() verwenden (siehe Verzeichnisbaum: Erkunden Sie den von Ordnern verwendeten Speicherplatz für MFI-Beispiel).
Nachdem Sie eine Liste von Dateien in einer Liste oder in einer JMP-Datentabelle haben, können Sie mit dem Filtern dieser Dateien mit einem Algorithmus beginnen. Hier sind ein paar Ideen:
- Verwenden Sie Ends With(), um das Ende der Zeichenfolge zu überprüfen
- Verwenden Sie Contains(), um nach bestimmten Zeichenfolgen zu suchen, und !Contains(), um andere Zeichenfolgen auszuschließen
- Für identische Segmente (handelt es sich nur um ein gemeinsames Wort, eine Wortkombination, Wörter in einer bestimmten Reihenfolge ...)Words() und Associative Arrays() sind hier höchstwahrscheinlich hilfreich
- Weitere Ideen finden Sie im Abschnitt „Skriptindizes“ für Zeichenfunktionen
Ohne zu wissen, wie die Datentabelle verwendet wird, ist es etwas schwierig, neben den optionalen Möglichkeiten zum Laden der ursprünglichen Dateiliste gute Tipps zu den zusätzlichen Fragen zu geben. Eine Möglichkeit wäre, die Datentabelle mit einigen geplanten Aufgaben zu erstellen, damit sie den Benutzern bei Bedarf zur Verfügung steht.
Betreff: Mehrfachdateiimport, DateifilterungHallo, ich kann nicht herausfinden, wie ich während MFI einen Dateinamen mit Tomate ausschließen möchte. Wie kann ich den Namensfilter bei MFI einstellen? danke für die Hilfe