Ho> 600.000 tabelle di dati jmp in una singola cartella e ognuna di queste ha 12.000 righe e la dimensione del file di ciascuna è ~ 100kb. Ho provato senza successo a concatenare tutti questi insieme ma, non senza sorpresa, posso solo generare un file di ~ 15 milioni di righe (circa 1200 file) prima che JMP si esaurisca e non risponda.
Ho usato questo script per eseguire l'operazione, che ho copiato da una di queste discussioni (mi scuso ma non sono riuscito a trovare la scheda effettiva quindi non posso collegarmi ad essa). Potrei copiare 1.000 file in singole cartelle e poi concatlo, ma sarebbe piuttosto noioso.
mypath = Pick Directory( "Select a directory" );
Set Current Directory( mypath );
y = Files In Directory( mypath );
For( i = N Items( y ), i > 0, i--,
If( Ends With( y[i], "jmp" ),
,
Remove From( y, i )
)
);
n = N Items( y );
For( i = 1, i <= N Items( y ), i++,
sname = Left( y[i], Length( y[i] ) - 4 );
/* If the file is the first in the list, open it. Otherwise, open the table, concatenate with the main table, and close the table just opened. */
If( i == 1,
mainDt = Open( mypath || y[i] );
mainDt << New Column( "source", character, set each value( sname ) );
,
dt = Open( mypath || y[i], hidden, invisible );
dt << New Column( "source", character, set each value( sname ) );
mainDt = mainDt << Concatenate( dt, Append to First Table );
Close( dt, NoSave );
Wait( 0 );
);
);
/* Give the final table a name. */
mainDt << Set Name( mypath, "_Concatenated Files" );
dt << Save( mypath, "_Concatenated Files" );
Anche questo componente aggiuntivo non funziona https://community.jmp.com/t5/JMP-Add-Ins/Bulk-Concatenate-Add-in/ta-p/35435
C'è un modo per concatenare solo i primi 1000 file, salvare la tabella concatenata, chiuderla e passare alla successiva serie di 1.000? Ho provato alcune cose, ma di solito si fermano solo dopo che è stato completato il primo set.
Saluti
David
Ecco una modifica al tuo script corrente che ora salva ogni 1000 file in un file concatenato. Nel nuovo script, ho anche corretto un errore, in cui alcune volte non si concatenava correttamente "mypath" con la stringa "_Concatenated Files". Inoltre, nella tua istruzione Salva, stavi indicando la tabella di dati sbagliata da salvare.
mypath = Pick Directory( "Select a directory" );
Set Current Directory( mypath );
y = Files In Directory( mypath );
For( i = N Items( y ), i > 0, i--,
If( Ends With( y[i], "jmp" ),
,
Remove From( y, i )
)
);
n = N Items( y );
counter=0;
For( i = 1, i <= N Items( y ), i++,
sname = Left( y[i], Length( y[i] ) - 4 );
/* If the file is the first in the list, open it. Otherwise, open the table, concatenate with the main table, and close the table just opened. */
If( counter == 0,
mainDt = Open( mypath || y[i] );
mainDt << New Column( "source", character, set each value( sname ) );
,
dt = Open( mypath || y[i], hidden, invisible );
dt << New Column( "source", character, set each value( sname ) );
mainDt = mainDt << Concatenate( dt, Append to First Table );
Close( dt, NoSave );
Wait( 0 );
);
counter = counter + 1;
If(mod(counter,1000) == 0,
mainDt << Set Name( mypath || "_Concatenated_Files_" || char(i) || "_" || char(i+counter) );
mainDt << Save( mypath || "_Concatenated_Files_" || char(i) || "_" || char(i+counter) );
counter = 0;
)
);
/* Give the final table a name. */
mainDt << Set Name( mypath || "_Concatenated_Files_" || char(i) || "_" || char(i+counter) );
mainDt << Save( mypath || "_Concatenated_Files_" || Char( i ) || "_" || Char( i + counter ));