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 :

Pointer la bonne colonne dans fichier csv


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut Pointer la bonne colonne dans fichier csv
    Bonjour,

    Je souhaite faire une extraction de certaine colonne d'un fichier csv, pour les positionner dans un nouveau fichier.
    Par contre suivant les lignes le contenu recherché ne ce situe pas dans les même colonnes.

    J'utilise le script for pour récupérer chaque colonne de chaque ligne du fichier présent dans ma variable !filename! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /F "skip=2 tokens=2,8,10,11,13,20,24 delims=;" %%a in (!filename!) do (
    Sauf que pour certaines lignes si je veux avoir le bon contenu dans mes variables, je suis obligée de saisir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /F "skip=2 tokens=2,8,10,11,12,16,19 delims=;" %%a in (!filename!) do (
    J'ai pu constaté que ce décalage de colonnes correspondaient au fait que certaines colonnes sont vides ( deux points-virgules collés : ";;").
    exemple si je souhaite prendre la 2ème et 8éme colonne, je n'aurais pas le même contenu suivant ces 2 lignes:
    • contenu1;contenu2;contenu3;contenu4;contenu5;contenu6;contenu7;contenu8;contenu9;contenu10;contenu11;
    • contenu1;contenu2;;contenu4;;;contenu7;contenu8;contenu9;contenu10;contenu11;


    J'aurais pour résultat :
    • 2=contenu2 et 8=contenu8
    • 2=contenu2 et 8=contenu11


    Cela est problématique car je ne sais jamais à l'avance qu'elle colonne sera vide !
    Comment puis-je y remédier pour que les références de colonnes soient toujours identique, malgré que certains des champs soient vides ?

    Merci pour votre aide

  2. #2
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Salut,

    Est-ce que ton csv contient des espaces, des virgules, des guillemets, éventuellement des points-virgules dans les données?
    Si oui, ce sera plus simple de t'orienter vers un parseur de fichier csv.

  3. #3
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Bonjour,

    espaces : oui (mais pas de tabulations)
    virgules : non
    guillemets : non
    points-virgules dans les données : non
    apostrophes : oui

    Les séparateurs présent dans le CSV sont des ";".
    Je ne vois pas d'autres caractères.... les champs ne sont pas non plus entouré par des guillemets ou apostrophes...

    J'ai trouvé une solution, mais je ne sais pas si elle est optimum.
    Je crée un fichier temporaire dans lequel je reprends toutes les lignes comprenant des ";;" pour les remplacer par une valeur de type ";_;", me permettant de mettre du contenu dans les colonnes vides et d'ainsi pouvoir les exploiter correctement.

    Code : 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
    35
    36
    37
    38
    39
    40
    @echo OFF
    chcp 65001
    setlocal enabledelayedexpansion 
    set oldfile=file.csv
    set tmpfile=tmp.csv
    set newfile=newfile.csv
    
    rem création du fichier temporaire
    for /F "tokens=1,* delims=:" %%L in (!oldfile!) do (
             set v_ligne=%%L
    
             rem remplacement des ";;" avec ";_;"
    	 set v_ligne=!v_ligne:;;=;_;!
    
             rem remplacement des ";;" avec ";_;" (deuxième passe car il en reste...)
    	 set v_ligne=!v_ligne:;;=;_;!
    
             rem écriture de la nouvelle ligne dans le fichier temporaire
    	 echo !v_ligne! >> !tmpfile!
    )
    
    rem Initiliastion des entêtes de colonne dans le fichier de destination final
    echo colonne1;colonne2;colonne3;colonne4;colonne4;colonne6;colonne7; > !newfile!
    
    for /F "skip=2 tokens=2,8,10,11,13,20,24 delims=;" %%a in (!tmpfile!) do (	
            rem récupération des "bonnes" valeur de colonnes
    	set v1=%%a
    	set v2=%%b
    	set v3=%%c
    	set v4=%%d
    	set v5=%%e
    	set v6=%%f
    	set v7=%%g
    
           rem écriture dans le fichier de destination final
           echo !v1!;!v2!;!v3!;!v4!;!v5!;!v6!;!v7!; >> !newfile!
    )				
    
    rem suppression du fichier temporaire
    del !filetmp!

  4. #4
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Salut,

    Ton code est une proposition de chatGPT, quelque chose comme ça ?
    L'approche est bonne, mais on peut faire plus simple. Éventuellement avec un peu de powershell dans ton script batch, sinon en batch pur. C'est toi qui vois.

Discussions similaires

  1. [2008] Ajout colonne dans fichier CSV
    Par Herlece dans le forum SSIS
    Réponses: 7
    Dernier message: 11/03/2013, 18h20
  2. Ajout de colonne dans fichiers csv
    Par ze_mechant dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/07/2012, 15h45
  3. Problème de séparateur dans fichier CSV
    Par mbibim63 dans le forum Excel
    Réponses: 4
    Dernier message: 05/07/2007, 08h29
  4. Recherche dans fichier CSV
    Par psal78 dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 02/05/2007, 07h48
  5. Sauvegarde de données dans fichier csv
    Par issou dans le forum C
    Réponses: 1
    Dernier message: 22/12/2005, 08h36

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