Joindre fichiers textesBonjour à tous,
J’ai un dossier qui contient 2800 fichiers textes. Chaque fichier texte possède 3 colonnes. J’aimerais pouvoir joindre tous ces fichiers textes dans un seul fichier JMP (en réalisant une jointure par numéro de ligne), ce fichier JMP possèderait donc 2800*3 colonnes.
Remarques :
Avant la jointure de tous les fichiers, il faudrait rajouter des titres sur les colonnes de chaque fichier.
Titre colonne 1 : x-nomdufichier
Titre colonne 2 : y-nomdufichier
Titre colonne 3 : valeur-nomdufichier
Avec « nomdufichier » qui correspond au nom du fichier que l’on ouvre.
J’arrive à récupérer le nom du dossier et tous les noms des fichiers textes à ouvrir dans ce dossier avec le code suivant :
// Chemin du répertoire contenant les fichiers textes
chemin_du_repertoire = "chemin\du\dossier";
// Parcourir le répertoire et obtenir les noms des fichiers
noms_fichier = Files In Directory(chemin_du_repertoire, "\*.txt");
Mais après je n’ai pas de point de départ pour la suite.
Merci pour votre aide et vos réponses !
Automation and ScriptingData AccessRe: Joindre fichiers textesPour obtenir un bon point de départ : effectuez l'action pour une paire de fichiers de manière interactive avec JMP, puis copiez le script à partir du journal amélioré. Ensuite, vous pouvez commencer à modifier ce script créé par JMP pour travailler beaucoup plus facilement dans votre script.
Re: Joindre fichiers textesJ'ai réussi à écrire un script qui permet de transformer les fichiers textes en fichiers JMP avec les bons titres des colonnes.
Cependant pour effectuer la jointure en ligne de tous ces fichiers, c'est plus difficile.
J'ai essayé avec le script suivant :
// Chemin du dossier contenant les fichiers texte
dossier = "......";
// Obtenir la liste de tous les fichiers dans le dossier
listeFichiers = Files In Directory(dossier);
// Créer une nouvelle table pour stocker les données combinées
table = New Table("Data Table");
// Boucle pour charger et combiner les fichiers
for (i = 1, i <= N Items(listeFichiers), i++,
fichierCourant = dossier || listeFichiers[i];
dt = Open(fichierCourant);
// Ajouter les colonnes du fichier courant à la table combinée
table << Join(With(dt),By Row Number);
// Fermer le fichier courant
Close(dt, NoSave);
);Re: Joindre fichiers textesAvec join, vous créez probablement toujours une nouvelle table, vous devrez donc également gérer cela. Une autre option consiste à utiliser Update à la place
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(3),
Compress File When Saved(1),
New Column("A1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3]))
);
dt1 = New Table("Untitled 2",
Add Rows(3),
Compress File When Saved(1),
New Column("B1", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 6]))
);
wait(1);
dt << Update(
With(Data Table("Untitled 2")),
Replace Columns in Main Table(None)
);
Close(dt1, no save);
(essayez ceci aussi d'abord avec l'option interactive)
Re: Joindre fichiers textesJ'ai écris le script ci-dessous qui fonctionne bien mais il est très long à l'exécution pour 2800 fichiers.
Names Default To Here( 1 );
// Début de la mesure du temps
start=tick seconds();
// Chemin du dossier contenant les fichiers texte
dossier = "...";
// Obtenir la liste de tous les fichiers dans le dossier
listeFichiers = Files In Directory(dossier);
For ( i = 1 , i <= 2862 , i++,
Names Default To Here( 1 );
if( i == 1,
fichierCourant = dossier || listeFichiers[1];
fichierCourant1 = dossier || listeFichiers[Num(i+1)];
dt = Open(fichierCourant);
dt1 = Open(fichierCourant1);
dt << Join(
With( dt1 ),
By Row Number,
Output Table( "Sans titre.jmp" )
);
Close(dt,NoSave);
Close(dt1,NoSave);
dt = current data table();
,
dt = current data table();
fichierCourant1 = dossier || listeFichiers[Num(i+1)];
dt1 = Open(fichierCourant1);
dt << Join(
With( dt1 ),
By Row Number,
Output Table( "Sans titre.jmp" )
);
Close(dt,NoSave);
Close(dt1,NoSave);
);
);
end=tick seconds();
runtime=end-start;
durée=runtime/60;
result=(Char("La durée est de ")||Char(durée,5) || " "||Char("minutes"));
show(result);Merci pour votre aide !