Importazione di più file, filtraggio dei fileCiao a tutti,
Novizio JSL qui! Ho bisogno di importare più file, dove i nomi dei file che vengono importati hanno alcuni parametri che devono essere soddisfatti.
- Non può contenere determinati caratteri.Questi caratteri sono sempre alla fine del nome del file.
- Deve includere una determinata stringa
- Se sono presenti segmenti di stringa identici all'interno dei nomi di file trovati, viene importato solo quello con la data e l'ora di sistema più recenti. Ho bisogno di un modo per tagliare e confrontare parti di nomi di file.
Es: voglio tutti i frullati di frutta contenenti "mela", ma non "pomodoro". (nome file, data e ora AAAAMMGG HHMM)
Kiwi_Apple_Mango.csv 20220125 1421
Apple_Grape_Kiwi.csv 20220125 1243
Durien_Tomato.csv 20220126 1607
Mela_Uva_Kiwi_Pomodoro.csv 20220126 1537
Mango_Banana_Durien.csv 20220126 0915
Uva_Ananas_Mela_Avocado.csv 20220126 0711
Apple_Grape_Kiwi.csv 20220127 1111
La denominazione dei file ha una struttura.La stringa che sto cercando è dopo più delimitatori.
Richieste aggiuntive
- Esistono suggerimenti per velocizzare la ricerca di questi file in una cartella in cui sono archiviate molte migliaia di file?Posso solo filtrare per estensione dopo la ricerca iniziale. Attualmente, ci vogliono molti minuti anche per cercare e trovare tutti i file in questa cartella.
- Qualche consiglio per importare un numero crescente di file? Il numero di file importati raggiungerà probabilmente i 1000 in pochi mesi.Tutti hanno la stessa struttura dati.Sono consapevole di dover "impilare file simili".Queste sono tutte tabelle di dati.
Ho cercato le funzioni Words e Munger, ma non sono sicuro che siano ciò di cui ho bisogno per completare lo script di importazione del file.
Accesso ai datifinestreRi: Importazione di più file, filtraggio dei fileGrazie!L'oggetto contiene con Pat Regex sembra fare il trucco!
Ri: Importazione di più file, filtraggio dei fileSì, ma è difficile dire quale sarà il migliore per te.
Potresti essere in grado di utilizzare contains() e ignorare completamente i _ delimitatori. Non so se i gettoni ananas E mela sono un problema o no, ma potrebbero esserlo poiché uno contiene l'altro. Uva E Pompelmo pure. Forse il maiuscolo/minuscolo lo risolve?
Potresti voler conoscere le espressioni regolari. (Ero solito espressioni-regolari.info .) Questa funzione restituisce la corrispondenza del carattere o un valore numerico mancante
regex("applepearorange","carrot|pear")
Puoi usarlo con isstring(...) o ismissing(...) per ottenere una risposta vero/falso. Il | nella regex è per le alternative.
Puoi anche usare una regex con contains_item(). Non l'ho mai usato tranne che per questo rapido test, e questo è l'unico modo che ho trovato per passargli uno schema:
Contains Item( "apple_grapefruit_lime", Pat Regex( "carrot|grape" ), "_" )
Il che significa dividere l'input su _ e testare ogni segmento con la regex.
Ri: Importazione di più file, filtraggio dei fileOra ho modificato il mio codice come di seguito e funziona, ma non ottimale. "abc" non è sempre solo e separato tra i delimitatori "_".Ad esempio, a volte posso avere "_xyzabc_" o "_abcxyz_". Esiste una funzione che scorre l'intera stringa per trovare questo set di caratteri?La stringa è sempre in una certa posizione all'interno della stringa.
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>
Ri: Importazione di più file, filtraggio dei fileHo capito che parte del problema è con la condizione della mia dichiarazione if, quindi ho rivisto il codice qui sotto.Continua sempre, a meno che non modifichi il codice per cercare la sottostringa iniziale dell'intero. Quello che sto cercando è all'interno della stringa e se cerco all'indietro o in avanti, testare solo l'inizio o la fine della stringa non è quello che sto cercando.
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>
Ri: Importazione di più file, filtraggio dei fileCiao, ho popolato con successo un elenco di nomi di file utilizzando Files In Directory().Ho studiato Filter Each (), ma non sono in grado di aggiungere tutte le condizioni che vorrei, quindi sto cercando di concatenare alcune istruzioni If condizionali nidificate in un ciclo For. Sullo sfondo ho un dt di ciascuno dei nomi di file, uno in ogni riga, tutti in una singola colonna.
Fondamentalmente, voglio ispezionare ogni elemento usando !contains() o contains() ed eliminare la riga, o mantenerla, di conseguenza.Sì, sono consapevole che ciò causerà problemi con il contatore "i".Il contatore è abbastanza facile da regolare. Un passo alla volta però. Quando eseguo questo script, non viene visualizzato alcun errore e non accade nulla.Ho controllato il debugger e non sono riuscito a trovare alcun tipo di contatore per contains(), quindi sono un po' confuso sul motivo per cui non funziona.Qualche intuizione?
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>
Ri: Importazione di più file, filtraggio dei fileVolevo solo dire che tornerò su questo thread. La mia attenzione deve essere altrove al lavoro in questo momento. non ho dimenticato.
Ri: Importazione di più file, filtraggio dei file(de-quarantenato, scusa, spero di aver scelto quello giusto, non è ovvio il motivo per cui è stato contrassegnato.)
contains() è una funzione che puoi usare, elemento per elemento, nell'elenco dei file restituiti da FilesInDirectory(...).
Puoi passare al filtro nomi di file che assomigliano a questo:
??mela*pera*.csv
Ogni ? corrisponde a 1 e ogni * corrisponde a 0 o più.w9apple_fig_pear_grape.csv corrisponderebbe.
Probabilmente potresti usare qualcosa del genere
list = files in directory("$desktop",recursive(1));
list = filtereach({name},list,contains(name,".txt"));
namefilterdata = concatitems(list,";");
per creare il valore da passare al filtro nome MFI.
L'elenco <Ri: Importazione di più file, filtraggio dei file
Quando aggiungo !Contains(part, "Tomato") o Contains(part, "Apple"), lo script è bloccato nel ciclo di rilevamento dei file nella cartella che sto cercando. L'importazione dei dati non avviene mai realmente. Qualche idea sul perché questo sta accadendo?
Copierei il codice qui, ma per qualche motivo viene costantemente segnalato come spam
Ri: Importazione di più file, filtraggio dei fileCiao Jthi,
Non appena aggiungo Contains allo script, continua a eseguire il loop per trovare i file nella cartella e non importa mai i dati. Qualche consiglio?
Multiple File Import(
<<SET folder=""></SET>
Ri: Importazione di più file, filtraggio dei fileGrazie per la risposta, jthi!Sarò in grado di testarlo entro l'inizio della prossima settimana e ti ricontatterò.
Importazione di più file, filtraggio dei filePer prima cosa otterrei un elenco di file. Ci sono molti metodi per farlo in JMP e quale utilizzare dipende dai requisiti di velocità (e dai possibili requisiti di dati) che hai.Per ottenere un elenco di file che puoi usare puoi usare i comandi del sistema operativo (nella riga di comando di Windows c'è dir e in powershell per esempio get-childitem (docs.microsoft.com) per ottenere l'elenco dei file o direttamente con JMP è possibile utilizzare Files In Directory() o Multiple File Import() (vedere Albero delle directory: esplora lo spazio utilizzato dalle cartelle per esempio MFI).
Dopo aver ottenuto un elenco di file in un elenco o in una tabella dati JMP, puoi iniziare a filtrarlo con un algoritmo. Ecco alcune idee:
- Usa Ends With() per verificare la fine della stringa
- Utilizzare Contains() per controllare determinate stringhe e !Contains() per escludere altre stringhe
- Per segmenti identici (è solo una parola comune, una combinazione di parole, parole in un ordine specifico...)Words() e Associative Arrays() sono molto probabilmente utili qui
- Vedere la sezione Indici di scripting per le funzioni dei caratteri per ulteriori idee
Senza sapere come verrà utilizzato il datatable, è un po' difficile dare buoni suggerimenti sulle richieste aggiuntive, oltre ai modi opzionali di caricare l'elenco iniziale di file. Un'opzione sarebbe quella di creare il datatable con alcune attività pianificate in modo che sia pronto per gli utenti quando ne hanno bisogno.
Ri: Importazione di più file, filtraggio dei fileCiao, non riesco a capire come escludere qualsiasi nome di file con tomato durante MFI. Come posso impostare il filtro dei nomi su MFI. grazie per l'aiuto