Forum Clubic

Concaténer des fichiers textes

Bonjour,

je reçois tous les jours des fichiers textes que je dois concaténer avant de les intégrer dans un système.
Ces fichiers textes comportent la date et l’heure du moment où ils sont générés.

nomdufichierYYYYDDMMHHMMSS.txt
nomdufichier2YYYYDDMMHHMMSS.txt

je voudrai obtenir un fichier
fichieraintegrer.txt

Mes connaissances pour rédiger des scripts .bat sont = 0. C’est pour cette raison que je n’ai pas su exploiter les réponses trouvées sur internet, qui d’ailleurs parfois était des fichiers binaires exécutables (solution non souhaitable).

Merci d’avance

Sebastien
Edité le 15/04/2010 à 11:30

Un début de réponse, parce que jsuis pas un fan du shell (windows je suppose) :

type nomdufichierYYYYDDMMHHMMSS.txt >> fichier_concatene.txt
type nomdufichier2YYYYDDMMHHMMSS.txt >> fichier_concatene.txt

On peut imaginer une boucle pour améliorer le truc …

çà a l’air basique !
C’est une belle ébauche.
J’ai plusieurs problèmes: en exécutant cela il a fait passer toutes les trames dans la fenêtre cmd.
J’aurais voulu obtenir l’output dans un fichier qui rassemble le contenu des deux autres, mais il n’a pas sauvegardé de fichier output.

L’autre problème c’est que les noms de fichiers input sont des variables, puisqu’ils sont générés tous les matins. Et cela doit tourner tous les matins sans que l’on ait à changer les noms de fichiers.
Edité le 15/04/2010 à 13:08

@echo off
REM Utilisé pour l'utilisation avancé du IF
setlocal enabledelayedexpansion

REM : REM = commentaires dans le code
REM supprime l'affichage de commandes inutiles

REM for : boucle
REM 'dir /B *.txt' : liste tous les fichiers txt dans le répertoire d'exécution
REM Algo : Pour tous les fichiers txt présents dans le répertoire d'exécution
REM Algo : echo = écrire, >> = redirection du flux à écrire
REM Algo : écrire le nom du fichier en cours dans le fichier fichieraintegrer.txt
REM Algo : si le nom du fichier n'est pas le nom du fichier de sortie
FOR /f %%i in ('dir /B *.txt') do (
IF %%i NEQ fichieraintegrer.txt echo %%i>>fichieraintegrer.txt
)

REM Fin de l'utilistion avancée du IF
endlocal

Ce bout de code permet de lister l’ensemble des fichiers txt et d’écrire cette liste dans un fichier nommé fichieraintegrer.txt
Il détecte si le fichier de sortie est compris dans la liste pour ne pas l’écrire dans le fichier de sortie.
Ce code peut être recopié dans un fichier nommé concat.bat, par exemple.

Tu peux faire aussi avec copy (copy source1 + source2 …+ sourceN Cible)

Edit:
Je n’avais pas vu la réponse de Jiheme44 c’est sûrement la meilleure solution pour toi
Edité le 15/04/2010 à 13:16


--> Jiheme44

Pourquoi utilises-tu cette fonctionnalité ?

en fait, je viens de tester et c’est inutile.

Moi non plus, certainement que la page était dans le cache.

En attendant, j’ai continué de chercher, et j’ai essayé çà de mon côté et cela permet d’obtenir presque ce que je veux:

le seul hic c’est que cela va concaténer TOUS les fichiers textes que je reçois alors que dans le répertoire des fichiers intégrer, je ne veux merger que ceux qui s’appellent ‘positionYYYYMMDD.txt’ et ‘position2YYYYMMDD.txt’. Les autres fichiers comme prix.txt par exemple, également présents dans ce répertoire ne doivent pas être mergés avec les positions.

Quelqu’un peut-il m’aider à peaufiner ce script ?

Et puis y a un autre truc que je ne comprends pas. C’est l’argument ‘c:\folder’
Il semblerait que cela soit une variable puisque cela marche dans n’importe quel répertoire où je le mets.
Sauf si je le mets sur un serveur là çà ne marche plus. Et je ne comprends pas.

Désolé, mais j’ai jamais fait de scripts *.bat, alors je rame et je ne comprends pas grandchose car je ne connais rien de toutes les commandes et arguments possibles.
Edité le 15/04/2010 à 14:06


@echo off
pushd c:\folder
for %%j in (position*.txt) do type "%%j" >> securityposition2process.txt
popd
:: End_Of_Batch

Peut etre en modifiant le filtre :confused:
Edité le 15/04/2010 à 14:42

Merci, çà marche. Je connais cette syntaxe standard NomDeFichier*.txt :wink: que j’utilise pour tout quotidiennement, notamment mes search. Mais bizarrement, ce matin çà n’a pas marché. Peut-être un ptit paramètre où j’avais merdé.
En tout cas maintenant çà marche nickelchrome.

Merci

a+

Seb