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 :

Supprimé les guillemets d'un fichier [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 107
    Par défaut Supprimé les guillemets d'un fichier
    Bonjour

    Je souhaite importer un fichier en base de données et doit d'abord le "nettoyer".
    Il contient des lignes avec des " pour encadrer les valeurs d'un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    lignes inintéressantes et ne commençant pas par le caractère guillemet et sans séparateur
    ...
    ...
    "  POSTE ";"         NOM        ";"   PRENOM   ";"             SOCIETE   ";"             SERVICE     ";"NB.COMM.";"DUREE DE CONVERS.";"P.A. H.T".
    "47171   ";"TARTEMPION    ";"    ROGER     ";"SA SOCIETE           ";"SON SERVICE          ";"       5       ";"          0:02:55          ";"    0.07"
    "47172   ";"ATINE              ";"    ANGELE    ";"SA SOCIETE           ";"SON SERVICE          ";"       5       ";"          0:32:12          ";"    2.35"
    ...
    ...
    Je souhaite ne conserver que la partie tableau et supprimer les guillemets. Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Ligne;Nom;Prenom;Societe;Unite;Consommation;Duree;Cout
    47171   ;TARTEMPION    ;    ROGER     ;SA SOCIETE           ;SON SERVICE          ;       5       ;        0:02:55          ;    0.07
    47172   ;ATINE              ;    ANGELE    ;SA SOCIETE           ;SON SERVICE          ;       5       ;        0:32:12          ;    2.35
    ...
    TOTAUX ...
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    del /Q sortie.csv
    :: on hérite d'une 1° ligne avec des noms de colonnes inadaptés
    
    :: on recrée un 1° ligne
    echo Ligne;Nom;Prenom;Societe;Unite;Consommation;Duree;Cout>> sortie.csv
    
    :: on ne recopie que les lignes commençant par un guillemet
    for /f "tokens=1-8 delims=;" %%a in ('findstr /B "\"" "fichier.csv"') do (
    	echo %%a;%%b;%%c;%%d;%%e;%%f;%%g;%%h>> sortie.csv
    )
    :: on supprime la ligne d'entête et les lignes des totaux
    type fichier.csv | find /v "  POSTE " | find /v "             TOTAL            " | find /v "TOTAL GENERAL                 "> sortiefinale.csv
    J'ai aussi essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'findstr /B "\"" "fichier.csv"'
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'findstr /B """ "fichier.csv"'
    Sans plus de résultat

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    simple !

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    setlocal enabledelayedexpansion
     
    for /f "delims=" %%a in (fichier.csv) do (
    	set "$ligne=%%a"
        echo !$ligne! | findstr \^" >nul && echo !$ligne:"=!
    	)


    Si il peut y avoir des " dans les lignes inutiles je te conseil de tester le premier caractère au lieu de la ligne :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @ECHO OFF
    setlocal enabledelayedexpansion
     
    for /f "delims=" %%a in (in.txt) do (
    	set "$ligne=%%a"
    	set $first=!$ligne:~0,1!
        echo !$first! | findstr \^" >nul && echo !$ligne:"=!
    	)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 107
    Par défaut Solution incomplète
    Bonjour
    la solution que tu proposes affiche bien mes lignes sans les guillemets.
    Pour bien comprendre.
    Je récupère chaque ligne dans la variable ligne.
    Puis je fais un echo de ma ligne avec remplacement du " par un nul si Je ne comprends pas bien ce dernier test: si ligne contient le caractère " ?

    Problème cela boucle indéfiniment !

    Et ensuite, pour l'envoyer dans un fichier, plutôt qu'à l'écran, est-ce que l'on peut écrire comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo !$ligne! | findstr \^" >nul && echo !$ligne:"=!>> sortie.csv

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Citation Envoyé par ulmeen Voir le message
    Bonjour
    la solution que tu proposes affiche bien mes lignes sans les guillemets.
    Pour bien comprendre.
    Je récupère chaque ligne dans la variable ligne.
    Puis je fais un echo de ma ligne avec remplacement du " par un nul si Je ne comprends pas bien ce dernier test: si ligne contient le caractère " ?
    On remplace le " par rien le >nul et por redirectionner le findstr vers nul sinon tu aurais les lignes avec string en double.
    Citation Envoyé par ulmeen Voir le message
    Bonjour

    Et ensuite, pour l'envoyer dans un fichier, plutôt qu'à l'écran, est-ce que l'on peut écrire comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo !$ligne! | findstr \^" >nul && echo !$ligne:"=!>> sortie.csv

    Je te conseil :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    setlocal enabledelayedexpansion
     
    (for /f "delims=" %%a in (fichier.csv) do (
    	set "$ligne=%%a"
        echo !$ligne! | findstr \^" >nul && echo !$ligne:"=!
    	)
    ) >sortie.csv

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 107
    Par défaut Cela fonctionne
    Merci Sachadee

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/08/2014, 12h07
  2. [XL-2003] supprimer les Guillemets autour du nom de fichier à enregistrer
    Par comme de bien entendu dans le forum Excel
    Réponses: 14
    Dernier message: 11/08/2011, 11h40
  3. Supprimer les lignes d'un fichier
    Par Wisefool dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/02/2011, 09h18
  4. Supprimer les lignes d'un fichier texte
    Par radhwene dans le forum Langage
    Réponses: 1
    Dernier message: 20/06/2007, 11h01
  5. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39

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