Apri più fileVoglio aprire più file di misurazione e concatenarli in un singolo file.
Sfortunatamente, a causa della strana intestazione dei file, non è semplice da usare Importa più file...
Quindi, ho impostato un ciclo for e carico ogni file tramite open() ..., lo elaboro uno per uno e poi li concateno.
È sorprendente quanto for( open(...)) sia più lento rispetto a MFI.
Alcuni trucchi che ho provato:
- carica tutti i file, concatena una volta -> aiuta
- opzione "invisibile" (per eliminare gli aggiornamenti delle tabelle) --> aiuta molto
ma ancora, nessuna possibilità di raggiungere le prestazioni di MFI.
Altri trucchi?
Dovrebbe aiutare a utilizzare MFI (senza stacking), elaborare le tabelle di dati separatamente e quindi concatenarle.
Esiste un comando per dire a MFI di aprire i file invisibile ?
Accesso ai datiRi: Apri più file- Sembra una buona lista dei desideri: un'opzione concatenata più aggressiva, un'opzione invisibile.
- prova a minimizzare le tabelle
- prova <
- MFI ha anche un lettore CSV più veloce di quello utilizzato da open(). Tuttavia, l'utilizzo di open può essere ancora rapido se è possibile utilizzare lo script di origine che specifica informazioni sufficienti per impedire un'ulteriore scansione dei dati. Oppure prova a utilizzare MFI per importare un singolo file.
- MFI utilizza più thread. Se stai guardando minuti di tempo (non secondi), JMP può eseguire JMP?potrebbe essere ciò di cui hai bisogno per eseguire più di un open() alla volta. Non è chiaro se il tempo impiegato per farlo funzionare sarebbe mai ripagato e un incubo da mantenere per qualcun altro.
Ri: Apri più fileHo scritto un componente aggiuntivo che lo fa con poche altre opzioni e funziona esclusivamente sulla potenza di MFI. Non l'ho condiviso sulla community perché ho bisogno di cancellarne alcuni elementi specifici dell'azienda. Questo potrebbe spronarmi a condividere ciò che ho imparato nel corso degli anni 
Ad ogni modo, puoi usare MFI e quello che faccio è fondamentalmente creare un elenco dei nomi dei file (tramite pick file o file nella directory) quindi ho un percorso singolare e un elenco di nomi di file per quel percorso, quindi li passo nel Comando MFI.
Quindi controllo l'output e se è più di 1 file forzerò la concatenazione. Ecco un frammento
filter = ConcatItems(fileList,";");
filesImported1 = Multiple File Import(
<<SET folder=""></SET>
filtro è fondamentalmente l'elenco dei nomi dei file, ma separati da ";"
Ri: Apri più fileQualcosa del genere potrebbe funzionare.
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
dir = "$temp/testfiles/"; // make sample files here
Delete Directory( dir );
Create Directory( dir );
Save Text File( dir || "a.csv", "a,b,c\!n1,2,3\!n-1,-2,-3" );
Save Text File( dir || "b.csv", "junk\!nc,b,a,e\!n3,4,5,98\!n-1,-2,-3,-4" );
Save Text File( dir || "c.csv", "junk\!njunk\!nb,d,a,c\!n6,99,7,8\!n-1,-2,-3,-4" );
dtList = Multiple File Import(
<<SET folder=""></SET>
cleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned uppulito
Ora dovrai decidere quali colonne sono numeriche...
Ri: Apri più fileCIAO @nathan-clark .
grazie per lo spartito.
Per quanto riguarda il caso applicativo qui discusso, è necessaria una preelaborazione a livello di file prima che i file possano essere uniti.
Pertanto, preferirei caricare i file con l'opzione
<<SET stack="" mode=""></SET>
Sul mio sistema (Jmp 17.1), Jmp inizia a visualizzare le oltre 100 tabelle Prima reagisce sul
<< show window(0);
Questo è stato il motivo per:
@hogi ha scritto:Esiste un comando per dire a MFI di aprire i file invisibile ?
Ri: Apri più fileOk, questo ha più senso. vedo a cosa stai arrivando...
L'unica cosa che lo renderà un po' più veloce è aprire i file in privato invece che invisibili. È un aggiornamento piuttosto rapido ... non sono sicuro che corrisponderà alla velocità di MFI però. Ho scoperto che anche quando è privato, JMP può eseguire la maggior parte delle operazioni sui file e riduce drasticamente le esigenze di RAM ... devi solo commentare privato durante il test o finisci per cercare tabelle di test che non puoi vedere 
Speriamo che JMP possa migliorare ulteriormente MFI.
Ri: Apri più file@nathan-clark , grazie mille, il privato lo rende all'incirca il fattore 2 più veloce 
@nathan-clark ha scritto:Speriamo che JMP possa migliorare ulteriormente MFI.
Sì, un invisibile (o anche privato!) Opzione in MFI
https://community.jmp.com/t5/JMP-Wish-List/Private-option-for-Import-Multiple-Files/idc-p/632087#M42...
sarà un GameChanger!
Abbastanza opzioni per me:
- usa la modalità privata in Open e fai un pisolino
- controlla se riesco ad adattarmi @Craige_Hales la soluzione di seguito al nostro tipo di file.
- aspetta il invisibile opzione in Jmp 18 
Ri: Apri più fileGrazie @Craige_Hales - tante idee davvero belle da copiare!
Sfortunatamente, il
// transfer data from text to unique cols.<BR />...
è abbastanza lento...
ecco un esempio: sul mio sistema ci vuole un secondo per caricare i dati e 10 secondi per convertire i dati ...
Visualizza altro...
Ri: Apri più fileBuona cattura, l'impostazione per le colonne della matrice della tabella dati è piuttosto ripida. In questo modo utilizza una configurazione per tutte le 40 righe invece di una per ogni riga. (vedi il temp list.) Vedo ~ 4 volte meglio per il caso di test di grandi classi:
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
dir = "$temp/testfiles/"; // make sample files here
Open( dir );
Delete Directory( dir );
Create Directory( dir );
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
For Each( {i, idx}, 1 :: 300,
dt0:height[1] = 1000 + i;
dt0 << Save( dir || Char( 1000+i ) || ".csv" );
);
t1 = HP Time();
dtList = Multiple File Import(
<<SET folder=""></SET>
(t2 - t1) / 1000000 = 2,105032;
(t3 - t2) / 1000000 = 2,65675;
Ri: Apri più fileCosa ne pensi di questo:
- utilizzare l'ultra-veloce MFI-Import (con opzione csv)
- separare i file di input tramite Subset (privato)
- postelaborare i dati per ottenere nomi di colonna significativi [qui solo un passaggio]
- concatenare i file
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
// then splits the data via Subset(private)
// ... some postprocessing ...
// and then concatenate the files
dir = "$temp/testfiles/"; // make sample files here
open(dir);
Delete Directory( dir );
Create Directory( dir );
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
Foreach ({i,idx},1::300,
dt0 << Save( dir || char(i)||".csv" ));
t1=HPtime();
dtList = (Multiple File Import(
<<SET folder=""></SET>
Ri: Apri più fileChe miglioramento raccogliendo i dati in un elenco temporaneo e scrivendo in blocco nella tabella dei dati!
Carino!
Grazie @Craige_Hales
Ri: Apri più fileMentre scrivevo il post per la lista dei desideri, ho trovato i desideri correlati e ho aggiunto i link lì:
Invisibile: c'è già il desiderio di aprire i file con privato opzione (dal 2022):
Opzione privata per l'importazione di più file
concatenazione aggressiva (dal 2020):
Importazione di file multipli - Forza combinazione
Quindi, con un po' di fortuna, sono già implementati nella prossima versione di Jmp 