IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

fusion fichiers csv en un seul et ajout d'une colonne qui mentionne le nom du fichier d'origine [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 10
    Par défaut fusion fichiers csv en un seul et ajout d'une colonne qui mentionne le nom du fichier d'origine
    Bonjour,

    Chaque semaine je récupère un fichier .csv qui a toujours la même structure.

    Les fichiers sont nommés de la façon suivante :
    AAAAAA_BBBBBBBB_CCCCC_2020-12-06.csv
    AAAAAA_BBBBBBBB_CCCCC_2020-11-29.csv
    AAAAAA_BBBBBBBB_CCCCC_2020-11-22.csv
    avec la date qui varie chaque semaine.

    Je stocke chaque semaine les fichiers dans un sous-répertoire.

    Pour exploiter cela ; je dois fusionner chaque semaine l'ensemble des tableaux csv en un seul fichier csv, en ne dupliquant pas la première ligne qui est la ligne des titres, et je dois créer une colonne supplémentaire qui contient le nom du fichier (ou encore mieux la date à récupérer dans le nom de fichier du fichier au format date).

    Pour le moment, je fais cela à la main, c'est très fastidieux et il y a de gros risque d'erreur.
    J'ai bien trouvé de l'aide sur internet et un batch qui me fusionne tout mes .csv en un seul en ne dupliquant pas la ligne des titres (qui fonctionne super bien ; merci xhark ; je le met en PJ), mais sans conservation de l'information du fichier d'origine (avec la date) donc je ne peux pas l'exploiter directement.

    Pour essayer de résumer je cherche à faire cela :

    fichier1.csv qui contient :

    titre1;titre2
    A;A1
    B;B1
    C;C1

    fichier2.csv qui contient

    titre1;titre2
    D;D1
    E;E1
    F;F1

    fichier de sortie combined.csv qui contient :

    titre1;titre2;fichier
    A;A1;fichier1
    B;B1;fichier1
    C;C1;fichier1
    D;D1;fichier2
    E;E1;fichier2
    F;F1;fichier2

    L'idéal serait un batch que je lance chaque semaine après avoir copié le nouveau fichier csv dans mon sous répertoire et qui donc écrase mon ancien csv combiné par un nouveau csv combiné qui contient l'intégralité des informations de tout les csv.

    Quelqu'un à pourrait-il m'aider?
    Des exemples de fichiers csv sont dans la pj.

    Merci de votre aide.

    Bonne journée
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 10
    Par défaut [BATCH] voici la PJ
    Voici la PJ qui a sauté

    moulinette-csv.zip

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Voici une proposition, remplace le . de set "dossier=." par ton dossier qui contient les csv
    par exemple set "dossier=c:\mondossier"

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    set "dossier=."
    set "output=combined.csv"
     
    set "output=%dossier%\%output%"
    if exist "%output%" del "%output%"
     
    for /f "tokens=*" %%a in ('dir "%dossier%\*.csv" /A-D/B') do (
    	set datefile=%%~na
    	set datefile=!datefile:~-10!
    	set /a counter=0
    	for /f "tokens=*" %%b in ('type "%dossier%\%%~nxa"') do (
    		if "!counter!"=="0" (
    			if not exist "%output%" echo %%~b;fichier>"%output%"
    		) else (
    			echo %%~b;!datefile!>>"%output%"
    		)
    		set /a counter+=1
    	)
    )
     
    pause

  4. #4
    Membre habitué
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 10
    Par défaut
    Merci beaucoup, excellent cela fonctionne nickel. J'ai passé un moment à chercher. Je te remercie.

    J'ai un peu modifier pour choisir en chemin relatif le chemin d'accès par rapport à mon fichier batch.

    J'ai tenté d'essayer de choisir un autre répertoire pour enregistrer mon fichier csv en sortie mais sans succès. Je suis preneur d'infos pour cela éventuellement, sinon tant pis.

    J'ai aussi un peu modifié les ";" car j'avais une colonne de trop dans mes csv finaux.


    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @echo off
    color 1F
    cls
     
    SETLOCAL ENABLEDELAYEDEXPANSION
     
     
    REM variable répertoire de travail actuel
    pushd %~dp0
     
    REM variables
    set "dossier=%~dp0\CSV_ENTREE"
    set "output=combined.csv"
     
     
     
    set "output=%dossier%\%output%"
    if exist "%output%" del "%output%"
     
    for /f "tokens=*" %%a in ('dir "%dossier%\*.csv" /A-D/B') do (
    	set datefile=%%~na
    	set datefile=!datefile:~-10!
    	set /a counter=0
    	for /f "tokens=*" %%b in ('type "%dossier%\%%~nxa"') do (
    		if "!counter!"=="0" (
    			if not exist "%output%" echo %%~b fichier>"%output%"
    		) else (
    			echo %%~b !datefile!>>"%output%"
    		)
    		set /a counter+=1
    	)
    )
     
    pause

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Sans succès ? Ce que tu as fait paraît cohérent, le %~dp0 embarque le \ de fin mais ceci ne devrait pas avoir d'impact.
    Il faudrait que tu me décrive où sont les csv ou est le .bat ou veux tu le fichier de sortie.

    Tu as donc résolu ton problème de colonne ?

  6. #6
    Membre habitué
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 10
    Par défaut
    Oui merci j'ai résolu mon problème de colonne.

    Alors, un répertoire de travail qui contient :
    - mon fichier batch (fusionner.bat)
    - un répertoire "CSV_ENTREE" qui contient les csv en entré
    - un répertoire "SORTIE" dans lequel j'aimerai poser le csv final (combined.csv)

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Comme ceci ça fonctionne chez moi avec ton arborescence.

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    set "dossier=%~dp0CSV_ENTREE"
    set "output=%~dp0SORTIE\combined.csv"
     
    if exist "%output%" del "%output%"
     
    for /f "tokens=*" %%a in ('dir "%dossier%\*.csv" /A-D/B') do (
    	set datefile=%%~na
    	set datefile=!datefile:~-10!
    	set /a counter=0
    	for /f "tokens=*" %%b in ('type "%dossier%\%%~nxa"') do (
    		if "!counter!"=="0" (
    			if not exist "%output%" echo %%~b;fichier>"%output%"
    		) else (
    			echo %%~b;!datefile!>>"%output%"
    		)
    		set /a counter+=1
    	)
    )
     
    pause

  8. #8
    Membre habitué
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 10
    Par défaut
    Fonctionne aussi parfaitement.
    Encore un grand merci à toi.
    Coder est un sacré métier. Cela ne s'improvise pas.

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout d'une colonne dans un fichier csv
    Par sorilazer dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 12/11/2012, 19h08
  2. [Lazarus] TStringGrid : Trier une colonne qui contient des noms de fichiers
    Par Invité dans le forum Lazarus
    Réponses: 2
    Dernier message: 03/03/2012, 11h27
  3. Ajout d'une colonne dans un fichier
    Par mimi7344 dans le forum MATLAB
    Réponses: 5
    Dernier message: 20/09/2011, 11h26
  4. d'un fichier xml à des tables Access : ajout d'une colonne calculée
    Par scribreiz dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 16/10/2009, 12h48
  5. Réponses: 4
    Dernier message: 16/02/2009, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo