Ouvrir plusieurs fichiersJe souhaite ouvrir plusieurs fichiers de mesure et les concaténer dans un seul fichier.
Malheureusement, en raison de l'étrange en-tête des fichiers, il n'est pas simple à utiliser Importer plusieurs fichiers...
Donc, j'ai mis en place une boucle for et chargé chaque fichier via open() ..., les traite un par un, puis les concatène.
Il est étonnant de constater à quel point for( open(...)) est plus lent que MFI.
Quelques trucs que j'ai essayé:
- charger tous les fichiers, concaténer une fois -> aide
- option "invisible" (pour se débarrasser des mises à jour de table) --> aide beaucoup
mais encore, aucune chance d'atteindre la performance de MFI.
D'autres astuces ?
Il devrait être utile d'utiliser MFI (sans empiler), de traiter ensuite les tables de données séparément et de les concaténer.
Existe-t-il une commande pour dire à MFI d'ouvrir les fichiers invisible ?
Accès aux donnéesRe : ouvrir plusieurs fichiers- Cela ressemble à de bons éléments de liste de souhaits : une option de concaténation plus agressive, une option invisible.
- essayez de minimiser les tables
- essayez <
- MFI dispose également d'un lecteur CSV plus rapide que celui utilisé par open(). Mais l'utilisation de open peut toujours être rapide si vous pouvez utiliser le script source qui spécifie suffisamment d'informations pour empêcher une analyse supplémentaire des données. Ou essayez d'utiliser MFI pour importer un seul fichier.
- MFI utilise plusieurs threads. Si vous regardez des minutes de temps (et non des secondes), JMP peut-il exécuter JMP ?peut être ce dont vous avez besoin pour exécuter plusieurs open() à la fois. Il n'est pas clair que le temps que vous passez à le faire fonctionner soit un jour payant, et un cauchemar à entretenir pour quelqu'un d'autre.
Re : ouvrir plusieurs fichiersJ'ai écrit un complément qui fait cela avec quelques autres options et fonctionne uniquement sur la puissance de MFI. Je ne l'ai pas partagé sur la communauté car j'ai besoin d'en supprimer certains éléments spécifiques à l'entreprise. Cela peut inciter à partager ce que j'ai appris au fil des ans 
Quoi qu'il en soit, vous pouvez utiliser MFI et ce que je fais est essentiellement de créer une liste des noms de fichiers (via choisir un fichier ou des fichiers dans le répertoire) afin d'avoir un chemin singulier et une liste de noms de fichiers pour ce chemin, puis de les transmettre dans le Commande MFI.
Ensuite, je vérifie la sortie et s'il y a plus d'un fichier, je force la concaténation. Voici un extrait
filter = ConcatItems(fileList,";");
filesImported1 = Multiple File Import(
<<SET folder=""></SET>
filter est essentiellement la liste des noms de fichiers, mais séparés par ";"
Re : ouvrir plusieurs fichiersQuelque chose comme ça pourrait fonctionner.
// 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 upnettoyé
Maintenant, vous devrez décider quelles colonnes sont numériques...
Re : ouvrir plusieurs fichiersSalut @nathan-clark .
merci pour l'extrait.
Concernant le cas d'application discuté ici, un prétraitement au niveau du fichier est nécessaire avant que les fichiers puissent être fusionnés.
Par conséquent, je préférerais charger les fichiers avec l'option
<<SET stack="" mode=""></SET>
Sur mon système (Jmp 17.1), Jmp commence à afficher les 100+ tables avant il réagit sur
<< show window(0);
C'était la raison pour laquelle :
@hogi écrit:Existe-t-il une commande pour dire à MFI d'ouvrir les fichiers invisible ?
Re : ouvrir plusieurs fichiersD'accord, cela a plus de sens. Je vois où tu veux en venir...
La seule chose qui le rendra un peu plus rapide est si vous ouvrez les fichiers en privé au lieu d'être invisibles. C'est une mise à niveau assez rapide... je ne sais pas si elle correspondra à la vitesse de MFI. J'ai constaté que même lorsqu'il est privé, JMP peut effectuer la plupart des opérations sur les fichiers et cela réduit considérablement les besoins en RAM ... il vous suffit de commenter en privé lors des tests ou vous finissez par rechercher des tables de test que vous ne pouvez pas voir 
Espérons que JMP puisse encore améliorer MFI.
Re : ouvrir plusieurs fichiers@nathan-clark , merci beaucoup, le privé le rend environ 2 fois plus rapide 
@nathan-clark écrit:Espérons que JMP puisse encore améliorer MFI.
Oui, un invisible (ou même privé !) option en IMF
https://community.jmp.com/t5/JMP-Wish-List/Private-option-for-Import-Multiple-Files/idc-p/632087#M42...
sera un GameChanger !
Assez d'options pour moi:
- utiliser le mode privé en Open et faire une petite sieste
- vérifier si j'arrive à m'adapter @Craige_Hales ci-dessous pour notre type de fichier.
- attends le invisible option dans Jmp 18 
Re : ouvrir plusieurs fichiersMerci @Craige_Hales - beaucoup de très bonnes idées à copier !
Malheureusement, le
// transfer data from text to unique cols.<BR />...
c'est assez lent...
voici un exemple - sur mon système, il faut une seconde pour charger les données et 10 secondes pour convertir les données ...
Voir plus...
Re : ouvrir plusieurs fichiersBonne prise, la configuration des colonnes de la matrice de la table de données est assez raide. De cette façon, une configuration est utilisée pour les 40 lignes au lieu d'une pour chaque ligne. (voir le temp list.) Je vois ~4X mieux pour le cas de test de grande classe :
// 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 ;
Re : ouvrir plusieurs fichiersQue dis-tu de ça:
- utilisez le MFI-Import ultra-rapide (avec l'option csv)
- séparer les fichiers d'entrée via Subset (privé)
- post-traitez les données pour obtenir des noms de colonne significatifs [ici juste un mouvement vers le haut]
- concaténer les fichiers
// 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>
Re : ouvrir plusieurs fichiersQuelle amélioration en collectant les données dans une liste temporaire - et en écrivant en bloc dans la table de données !
bon!
merci @Craige_Hales
Re : ouvrir plusieurs fichiersEn écrivant le message pour la liste de souhaits, j'ai trouvé des souhaits connexes - et j'y ai ajouté des liens :
Invisible : on souhaite déjà ouvrir les fichiers avec privé Option (à partir de 2022):
Option privée pour importer plusieurs fichiers
concaténation agressive (à partir de 2020):
Importation de plusieurs fichiers - Forcer la combinaison
Donc, avec un peu de chance, ils sont déjà implémentés dans la prochaine version de Jmp 