Combinez plusieurs fichiers txt ou csvCe script combinera plusieurs fichiers txt ou csv en un seul fichier. Le script demande un répertoire cible, ouvre le premier fichier, puis ajoute de manière itérative les fichiers suivants au premier à l'aide de la fonction Table Concatenate.Une nouvelle colonne est créée dans le fichier final : cette colonne contiendra le nom du fichier d'où provient chaque ligne. Si tous les fichiers texte ont les mêmes noms de colonnes (identiques), ces colonnes seront empilées (concaténées) dans une seule colonne. Les colonnes uniques seront également transférées vers le fichier final.
Le script comporte plusieurs sections commentées, ces sections du script peuvent être utilisées pour combiner plusieurs fichiers Excel. Lors de la combinaison de fichiers Excel, on suppose que ces fichiers .xls ou .xlsx n'auront qu'une seule feuille de calcul.
-------Mise à jour le 01 juin 2016
J'avais une question intéressante à propos de ce script. Quelqu'un avait une pile de fichiers CSV où les noms de colonnes se trouvaient sur la deuxième ligne, et pour aggraver les choses, les noms de colonnes étaient délimités par des points-virgules tandis que le texte était délimité par des virgules.Une façon de résoudre ce problème consiste à ajouter des paramètres d'importation au script.C'est l'une de ces choses que je suis heureux que JMP écrive pour moi.J'ai ouvert et importé manuellement le fichier (en utilisant Fichier>Ouvrir>Ouvrir avec aperçu, puis dans la boîte de dialogue, j'ai défini les colonnes pour qu'elles commencent sur la deuxième ligne et j'ai ajouté un "autre" délimiteur de ";".Après avoir importé le fichier, je suis allé dans le script source et j'ai trouvé l'argument Paramètres d'importation.
Pour que le script ouvre ces fichiers, j'ai ajouté une expression, importationset=expr(import settings(...coller le script ici...)); vers le haut du script. (c'est une expression car il n'est pas utile d'évaluer les paramètres d'importation jusqu'à ce que j'en ai besoin plus tard lorsque j'ouvrirai les fichiers.)
Puis vers le bas, j'ai ajouté l'expression à l'argument open, open(filename,importset).
REMARQUE IMPORTANTE : Si vous souhaitez télécharger ce deuxième script avec le filtre d'importation et vous attendre à ce qu'il fonctionne automatiquement sur vos tables CSV au format inhabituel.cela ne fonctionnera tout simplement pas, vous devez créer vos propres paramètres d'importation et les remplacer par les paramètres qui sont ici à titre d'exemple.
--------Il y a quelque temps, il y avait aussi une question sur la façon de faire fonctionner cela sur un MAC.
J'ai ajouté un autre bit pour que cela fonctionne également sur Mac (ce qui signifie que je n'ai pas testé cela sur PC)
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
-----Mise à jour le 10 octobre 2016
Justin C a remarqué que les noms de fichiers avec plusieurs "." ne fonctionnaient pas très bien et a suggéré de remplacer "l'élément" par -1 afin que les extensions de fichier plutôt que le deuxième élément soient utilisées pour les extensions de fichier. Bonne solution et idée importante à garder à l'esprit lorsque vous travaillez avec des noms de fichiers. Merci Justine !
UtilitairesRe : Combiner plusieurs fichiers txt ou csvJe constate que les colonnes ne sont pas toujours correctement jointes dans mon cas.Quelqu'un peut-il m'aider ?
J'ai un tas de fichiers que j'aimerais concaténer, mais l'ordre des colonnes change parfois, par exemple ci-dessous :
Fichiers 1-3
Ordre des colonnes (A,B,C,D,E,F,G)
Fichiers 4-100
Ordre des colonnes (A,B,C,D,E, H ,F,G)
Fichiers 101-1000
Ordre des colonnes (A,B,C, K ,D,E, H ,F,G, je , J. )
J'aimerais combiner tous ces fichiers et m'assurer que les données de chaque colonne se retrouvent toujours dans la colonne appropriée du tableau final.Je souhaite également conserver toutes les données (ne supprimez pas la colonne K, laissez simplement toutes les lignes vides là où la colonne K n'existait pas).Toute aide serait extrêmement appréciée !
Re : Combiner plusieurs fichiers txt ou csvExiste-t-il un moyen d'ajouter un en-tête dans ce script ?J'ai environ 20 000 fichiers contenant des données sans en-tête
Re : Combiner plusieurs fichiers txt ou csvBonjour,
Je suis nouveau dans les scripts JMP. Pour une raison quelconque, le paramètre d'importation ne fonctionne pas pour moi lorsque je combine plusieurs fichiers texte. Je peux voir les fichiers concaténés. Dans mon cas, le nom de la colonne commence à 11 et les données commencent à 12. Mais les fichiers combinés commencent à partir de la colonne 1 au lieu de partir de 11. S'il vous plaît, indiquez-moi ce qui me manque ?
merci
Re : Combiner plusieurs fichiers txt ou csvJ'ai créé une solution pour cela qui consiste à copier les fichiers dans le répertoire temporaire et à les renommer. Je ne vois aucun moyen de joindre un fichier, alors voici le code
names default to here (1);
Clear Symbols();
//Import settings, sometimes CSV files aren't exaclty formatted as CSV. Add import settings
//This is an expression to use later in the Open argument.
//Column names start on the second row, and are semicolon delimited
importset=expr( Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, Other( ";" ), CSV( 0 ) ),//use ";" as a delimiter too
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 2 ),//starting on second row
Data Starts( 3 ),//data starts on 3rd row
Lines To Read( "All" ),
Year Rule( "20xx" )
));
//set up variables with starting values
filelist={}; //empty list
//launch dialog to get the file location
prefilepath = munger(Pick Directory( "Browse to the Directory of the .txt / .csv files " ),1,"/","");
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
prefilelist = Files In Directory( filepath );
n2=nitems(prefilelist);
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);<BR />
nf=nitems(filelist); //number of items in the working list
tempDir = "$TEMP\JMP\";
Create Directory(tempDir); //create the temp folder in the "%temp%" windows directory
//for each .csv file found on the server
For( i3 = 1 , i3 <= nf, i3++,
copyFileName = filelist[i3];
csvPos = Contains(filelist[i3],".csv"); //determine where in the filename .csv is
newFileName = Left(copyFileName, csvPos + 3 ); //determine the filename without the extra bits after .csv
Copy File (filepath||filelist[i3], tempDir||copyFileName);//copy the file to the temp folder
Rename File (tempDir||copyFileName, newFileName);//rename the file without the extra bits after .csv
filelist[i3] = newFileName; //replace the reference in the array to this file
);//end of the for loop
cctable= New Table( "Combined data table ");//make an empty table
cctable<<NEW column=""></NEW>Re : Combiner plusieurs fichiers txt ou csvJ'ai quelques difficultés à faire fonctionner cela.Je pense que le problème est que j'utilise des fichiers qui sont essentiellement des fichiers texte délimités par des virgules mais avec une extension .log.
J'ai changé le txt en un journal dans votre code à l'adresse :
Item( -1, prefilelist[i2], "." ) == "log"
J'obtiens une erreur de
Send attend un objet scriptable lors de l'accès ou de l'évaluation de 'Send' , dt << /*###*/Run Formulas() /*###*/
à:
dt<< exécuter des formules();
Si je change les extensions de mes fichiers en .txt, cela fonctionne.Cependant, j'ai des milliers de fichiers que je souhaite combiner et des dizaines sont ajoutés quotidiennement. Existe-t-il un moyen de faire fonctionner cela avec des fichiers portant une extension .log ?
2ème question.
Mes fichiers ne contiennent aucun en-tête.Existe-t-il un moyen de combiner les fichiers puis d'ajouter des en-têtes à la table de données ?Il prend actuellement la ligne supérieure du premier fichier et en fait un en-tête, qui contient toutes les données.
Merci pour toute aide.
Re : Combiner plusieurs fichiers txt ou csvJe veux juste dire merci Byron. C'est un exemple formidable et pratique.
Ce script me fait gagner tellement de temps !!!
Ce script fait en quelques secondes ce qui me prenait des heures et des heures de travail.
Merci!!!
Re : Combiner plusieurs fichiers txt ou csv<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />La même approche fonctionnera avec "join". Essayez simplement de remplacer l'argument concat par un argument de jointure.(effectuez la jointure manuellement, puis copiez le script Source dans le tableau résultant pour un exemple de ce à quoi ressemblerait l'argument de jointure
Re : Combiner plusieurs fichiers txt ou csvExiste-t-il un moyen simple de combiner plusieurs fichiers txt ou csv côte à côte en utilisant JOIN au lieu de les combiner verticalement avec Enchaîner dans Combiner txt Tables.jsl ?
Re : Combiner plusieurs fichiers txt ou csvSalut Byron, ce script fonctionne très bien. J'ai légèrement modifié pour sélectionner un sous-ensemble de données à partir des fichiers ouverts, ajouter des colonnes, changer les caractères en numériques, etc. Une question que je me posais est de savoir s'il existe un moyen simple de modifier le script pour spécifier le dossier dans lequel se trouvent les fichiers et ne pas les avoir. une invite apparaît ?
Merci
TS
Re : Combiner plusieurs fichiers txt ou csvCe script ne s'exécute pas sur mon système : Mac OS X 10.10.5 + JMP Pro 12.1.0
Re : Combiner plusieurs fichiers txt ou csvoui, la référence négative est pratique, et elle fonctionne dans presque toutes les fonctions qui font référence à la position des caractères, ainsi qu'à certains endroits auxquels vous ne vous attendez pas ; comme, imaginez avoir -1 décimales.
Re : Combiner plusieurs fichiers txt ou csvSalut Bryon et à tous,
J'ai pu ajouter une petite mise à jour : supprimer les extensions de fichier de fin comme .csv ou .txt du nom de la colonne source :
donc dans la dernière section au lieu de :
définir chaque valeur (filenow)
J'ai ajouté :
définir chaque valeur (supprimer (filenow,-4,-1))
J'ai été surpris que la référence négative fonctionne !
Re : Combiner plusieurs fichiers txt ou csvBonjour Byron,
Joli script et fonctionne à merveille dans JMP 12. Je me demandais quel était le bon moyen de commencer à lire les fichiers de données sources à partir d'une ligne spécifique, tronquer les informations d'en-tête si vous le souhaitez.Par exemple, commencez par une ligne qui commence par le mot « CH » si le format de tous les fichiers sources est le même ?
Re : Combiner plusieurs fichiers txt ou csvBonjour Byron,
Cela se produit uniquement dans ce script. Il affiche l'erreur vide "NItem()" dans la fenêtre du journal après l'exécution du script. Je copie donc simplement l'intégralité du script et le colle dans une nouvelle fenêtre de script, puis il fonctionne correctement.
Merci
Re : Combiner plusieurs fichiers txt ou csvJe ne suis pas sûr de comprendre la question. Ce comportement est-il reproduit avec d'autres scripts ?
Re : Combiner plusieurs fichiers txt ou csvBonjour Byron,
Merci pour ce précieux script. J'utilise ce script pour ajouter plusieurs fichiers .txt. Mais il s'exécute après avoir copié le même script dans un nouveau script. Je veux demander pourquoi il ne s'exécute pas lors de l'ouverture du même script lors de la première tentative. Merci pour la réponse par avance. Ce script est très utile.
Re : Combiner plusieurs fichiers txt ou csvSean,
Sur MAC, les boîtes de dialogue pour sélectionner un répertoire ou pour sélectionner un fichier sont identiques. Le script vous demande d'identifier un répertoire contenant des fichiers csv et/ou txt. Le script permet actuellement de concaténer les fichiers csv et txt dans la liste des fichiers. Si vous souhaitez que ce soit plus restrictif, supprimez simplement le type de fichier que vous souhaitez exclure de cette partie du script.
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);
Ce qui serait plutôt cool, c'est que le script renvoie une liste des extensions de fichiers dans le répertoire sélectionné et laisse ensuite l'utilisateur cocher les types de fichiers à ajouter à la variable filelist.
Si vous avez le temps de créer des scripts, veuillez publier le script mis à jour !
Cordialement,
Byron
Re : Combiner plusieurs fichiers txt ou csvBryan,
J'utilise le JMP 10.0.0 sur OS X 10.10.2. Une fenêtre s'ouvrira lorsque j'exécuterai le script de sélection des fichiers. Cependant, je ne parviens à sélectionner aucun fichier .txt ou .csv dans la fenêtre lancée. Je ne sais pas si le script nécessite une révision supplémentaire pour JMP (OS X ver.). Pourriez-vous nous aider à résoudre ce problème ? Merci.
Sean
Re : Combiner plusieurs fichiers txt ou csvMerci, je l'ai eu maintenant.
Re : Combiner plusieurs fichiers txt ou csvVallée,
Pourriez-vous vérifier à nouveau la pièce jointe ?
Je l'ai recollé.
-Byron
Re : Combiner plusieurs fichiers txt ou csvOù est le scénario ?Je n'arrive pas à le trouver nulle part.