<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Vorrei trovare del codice che apra i file in una directory di Windows in modo ricorsivo.
Diciamo che il mio percorso è: c:\charlie\data
Desidero che JMP trovi tutti i file *.txt in questa directory e in quelle inferiori e li apra tutti.
Alla fine li unirò ma per ora voglio solo aprirli tutti.
Ho provato (senza fortuna):
percorso = "C:\charlie\data\data1";
file_list = File nella directory("C:\charlie\data\data1");
for (i=1, i<=NItems(file_list), i++,
dt =
Aprire(
percorso || elenco_file ,
Importa impostazioni(
Fine riga (CRLF, CR, LF),
Fine del campo (virgola, altro( "0x7c")),
Citazioni di striscia( 1 ),
Usa l'apostrofo come virgoletta (0),
Scansione intero file( 1 ),
Tratta le colonne vuote come numeriche (0),
Etichette( 1 ),
Nomi delle colonne Inizio( 1 ),
Inizio dati( 2 ),
Righe da leggere(Tutte),
Regola dell'anno("20xx")
)
);
);
Questo script funziona molto bene per aprire tutti i file in una directory, filtrarli in base ad alcuni criteri e quindi concatenare tutti i file.
================================================== ================================================== =
percorso = "C:\temp\dati\";
elenco_file = {};
file_list = File nella directory (percorso, ricorsivo);
mieiFili = elenco_file;
For( i = 1, i <= N elementi( elenco_file ), i++,
Se( Contiene( elenco_file , ".sum" ),
i miei file = ""
)
);
file_finali = i miei file;
///////////////////Apri il primo file nell'elenco/////////////////////
///////altri file verranno aggiunti a questo///////////
io=1;
dtjoin = Apri(
percorso || final_files ,
colonne(
Pass_Fail = Carattere,
Parametro = Carattere,
Valore_dati = numerico,
Unità = carattere,
LSL = numerico,
USL = numerico,
Nota = Carattere,
Test_Cond = Carattere
),
Importa impostazioni(
Fine riga (CRLF, CR, LF),
Fine del campo (virgola, altro( "0x7c")),
Citazioni di striscia( 1 ),
Usa l'apostrofo come virgoletta (0),
Scansione intero file( 1 ),
Tratta le colonne vuote come numeriche (0),
Etichette( 1 ),
Nomi delle colonne Inizio( 1 ),
Inizio dati( 2 ),
Righe da leggere(Tutte),
Regola dell'anno("20xx")
),
)
<
///////////////////////////////////////////////// //////////////////////////
//////////Ora apri i file rimanenti nell'elenco//////////////
///////////////////////////////////////////////// //////////////////////////
io=2;
For( i = 2, i <= N elementi( file_finali ), i++,
dt =
Aprire(
percorso || final_files ,
colonne(
Pass_Fail = Carattere,
Parametro = Carattere,
Valore_dati = numerico,
Unità = carattere,
LSL = numerico,
USL = numerico,
Nota = Carattere,
Test_Cond = Carattere
),
Importa impostazioni(
Fine riga (CRLF, CR, LF),
Fine del campo (virgola, altro( "0x7c")),
Citazioni di striscia( 1 ),
Usa l'apostrofo come virgoletta (0),
Scansione intero file( 1 ),
Tratta le colonne vuote come numeriche (0),
Etichette( 1 ),
Nomi delle colonne Inizio( 1 ),
Inizio dati( 2 ),
Righe da leggere(Tutte),
Regola dell'anno("20xx")
)
);
dtjoin = dtjoin << Concatena(
dt,
nome della tabella di output( "Unito" || Char( i ) ),
);
Chiudi(dt, nosave);
Chiudi( "Iscritto" || Char( i - 1 ), nosave );
Aspetta(0.1);
); //Fine di For
dtjoin <Ri: Aprire più file di dati in modo ricorsivo
CHFields,
Stavo facendo qualcosa di simile, dove volevo aprire un solo file alla volta e poi concatenarlo alla fine del file precedente.
Il metodo semplice di aprire tutti i file e quindi concatenarli tutti in una volta era troppo complicato a causa del numero di file con cui stavo lavorando.
Lo script allegato ti consente di scegliere una directory con file txt o csv e quindi di concatenarli tutti insieme, uno alla volta.
Questo aiuta se anche tutti i file non entrano in memoria contemporaneamente.
-B
Ho aggiunto la "\"
Grazie!
Ora sto cercando di concatenarli tutti.
Ho trovato un post di MJB che è stato molto utile.
Ha pubblicato un modo per farlo ma con JOIN e solo con file JMP.
Ho aggiunto la mia routine di importazione e le opzioni "apri con anteprima".
Avevo bisogno di aprire il primo file, quindi impostare il ciclo per aprire gli altri file
e concatenarli con il primo.
Non funziona ancora del tutto ma sono vicino.
La variabile del percorso non termina con una barra, quindi il nome file risultante avrà esito negativo.
Per renderlo ricorsivo e avere nomi di file corretti:
path = "C:\charlie\data\data1\";
file_list = Files In Directory(path, recursive);
for(i = 1, i <= N Items(file_list), i++,
print(path || file_list);
);
È possibile modificare la dichiarazione di stampa in base alle proprie esigenze.