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 - problème sur un batch déjà créé suite à modification structure .csv [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 - problème sur un batch déjà créé suite à modification structure .csv
    Bonjour,

    Il y a quelques temps, j'avais pu, avec l'aide du forum, mettre en place un batch qui me fusionnait tous les fichiers .csv contenus dans un répertoire, sachant que chaque semaine j'alimente ce répertoire du nouveau fichier pour la semaine.

    Le post de l'époque : https://www.developpez.net/forums/d2...ier-d-origine/

    Cela fonctionnait très bien, jusqu'à ce que la structure des .csv que je récupère chaque semaine change.
    J'ai maintenant une ligne de titre première ligne du .csv
    J'ai une ligne vide (ou avec un espace?) qui se balade en fin du fichier .csv

    J'ai plusieurs type de .csv donc la ligne de titre n'est pas toujours la même.

    Mon batch n'est maintenant plus fonctionnel.
    Je met en PJ le script, avec mes nouveaux types de .csv et le résultat de mon batch actuel. moulinette-csv_old.zip

    Je patauge dans le script, je n'y connais pas grand chose en fait, auriez-vous des idées pour surmonter mon nouveau problème ?
    Il faudrait que le script supprime des lignes que je choisirai en les ciblant via du texte, comme cela il est adaptable en cas de modification impromptue de structure de .csv.

    Je partais sur :
    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    type *.csv | find /v "État d'avancement des dossiers"

    M'enfin je n'arrive à rien avec cette fonction là. Et en plus, cela fonctionnerai avec une ligne comportant du texte, mais pour supprimer ma ligne vide avec juste un "espace", je ne sais pas trop comment faire.

    Si quelqu'un a des idées pour m'aiguiller?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 549
    Par défaut
    Bonjour,

    Concernant la suppression de la ligne de titre vous pouvez ajouter ceci à la fin de votre script :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /vc:"avancement des dossiers" %output% >"%~dp0SORTIE\combined2.csv"
    Attention à ne pas utiliser des chaînes contenant des caractères spéciaux ou bien des accents comme par exemple : État d'avancement des dossiers

    Concernant la demande de suppression de la dernière ligne vide, malgré de nombreuses recherches je ne pense pas que cela soit possible, est-ce vraiment si gênant ?
    Peut-être qu'eric ou une autre personne aura une solution.

  3. #3
    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
    Bonjour,

    Merci pour votre aide.

    Effectivement au pire du pire les lignes vides, je dois pouvoir faire avec.


    J'ai inséré la ligne de code que vous me proposez :

    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
    @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 %%~bfichier>"%output%"
            		) else (
            			echo %%~b!datefile!>>"%output%"
            		)
            		set /a counter+=1
            	)
            )
     
    findstr /vc:"avancement des dossiers" %output% >"%~dp0SORTIE\combined2.csv"  
     
    popd
    echo.


    Elle fonctionne bien pour supprimer en bout de courses les lignes de pré-colonne surnuméraire, toutefois, cela ne colle plus avec le script initial car il conservait la ligne des titres du tableau en ajoutant un colonne supplémentaire dans laquelle il mettait la date issue du nom du fichier. Je me retrouve donc avec plusieurs fois les noms des colonnes et des dates un peu partout (PJ).
    Fichiers attachés Fichiers attachés

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 549
    Par défaut
    Ca devrait aller mieux avec cette nouvelle version :

    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
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    set "dossier=%~dp0CSV_ENTREE"
    set "output=%~dp0SORTIE\combined.csv"
     
    if exist "%output%" (del "%output%")
     
    cd /d %dossier% || exit /b 1
     
    for %%A in (*.csv) do findstr /vc:"avancement des dossiers" %%A >"# %%A"
     
    for /f "tokens=*" %%a in ('2^>nul dir "#*.csv" /A-D/B') do (
     
            set "datefile=%%~na"
            set "datefile=!datefile:~-10!"
     
            for /f "usebackq tokens=*" %%b in ("%%~nxa") do (
     
    		set "ligne=%%b"
            	if exist "%output%" (if not "!ligne:~0,6!"=="libell" (echo %%~b #!datefile!>>"%output%")) else (echo %%~b #fichier>"%output%")
     
            )
     
    )
     
    del "#*.csv"
     
    findstr /c:";" "%output%" >"%~dp0SORTIE\combined2.csv"
     
    del "%output%"

  5. #5
    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

    Et bien cela fonctionne avec les fichiers csv exemples joints.

    Par contre, bizarrement, avec mes fichiers réels, cela ne fonctionne plus totalement. J'ai changé le texte "avancement des dossiers" par mon vrai texte, malheureusement il possède pas mal de caractère à accent et apostrophe, mais quand bien même en ne prenant qu'un seul mot, il m'enlève bien la ligne d'entête gênante. Par contre, il me répète les entêtes de colonnes. Bizarre. Bizarre. Et comme je n'arrive pas bien à comprendre le cheminement du code, je ne sais pas ce qui plantouille.

    Je vais y re-réfléchir demain à froid.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 549
    Par défaut
    Pour les entêtes de colonne, j'ai créé un filtre qui récupère les 6 premiers caractères en début de ligne, en l'occurrence le mot "libell".
    Effectivement le filtre ne fonctionnera pas si la ligne d'entête ne commence pas par le mot "libellé".

    Je n'ai pas trouvé de meilleur critère pour identifier la ligne d'entête.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/12/2020, 09h05
  2. Problème ouverture fichier csv sur un tableur
    Par kamnouz dans le forum Langage
    Réponses: 5
    Dernier message: 23/12/2010, 14h13
  3. Fusion Fichiers CSV
    Par Geoffroy123 dans le forum Visual C++
    Réponses: 2
    Dernier message: 26/02/2010, 15h19
  4. Problème avec requête de Maxence HUBICHE suite modif
    Par kiki.gaby dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/11/2008, 15h25

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