J'ai plus de 600 000 tables de données jmp dans un seul dossier. Chacune d'entre elles comporte 12 000 lignes et la taille de chaque fichier est d'environ 100 Ko. J'ai essayé sans succès de concaténer tout cela, mais sans surprise, je ne peux générer qu'un fichier d'environ 15 millions de lignes (environ 1200 fichiers) avant que JMP ne soit à bout de souffle et ne réagisse plus.
J'ai utilisé ce script pour effectuer l'opération, que j'ai copiée à partir de l'une de ces discussions (excuses mais je n'ai pas pu trouver le tableau réel, je ne peux pas créer de lien vers celui-ci). Je pourrais copier 1 000 fichiers dans des dossiers individuels puis concaténer, mais ce serait plutôt fastidieux.
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" );
Ce complément ne fonctionne pas non plus https://community.jmp.com/t5/JMP-Add-Ins/Bulk-Concatenate-Add-in/ta-p/35435
Existe-t-il un moyen de ne concaténer que les 1000 premiers fichiers, d'enregistrer la table concaténée, de la fermer, puis de passer à la série suivante de 1 000? J'ai essayé plusieurs choses mais elles s'arrêtent généralement une fois le premier set terminé.
Cordialement
David
Voici une modification de votre script actuel qui enregistre désormais tous les 1 000 fichiers dans un fichier concaténé. Dans le nouveau script, j'ai également corrigé une erreur dans laquelle, à quelques reprises, vous ne concaténiez pas correctement "mypath" avec la chaîne "_Concatenated Files". En outre, dans votre instruction Save, vous indiquiez le mauvais tableau de données à enregistrer.
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 ));