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 :

Suppression d'une ligne particulière dans un fichier texte


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Suppression d'une ligne particulière dans un fichier texte
    Bonjour à tous,

    Je souhaite faire un contrôle de contenu d'un fichier en batch afin de traiter ce fichier via mon ETL.
    Je préfère passer par un petit batch avant de lancer mon traitement pour supprimer les lignes en erreurs.

    Mon fichier se trouve sous la forme suivante :
    "1111";"VELO";"TOTO";"PARIS-MARSEILLE"
    "2222";"AUTO";"TUTU";"PARIS-LYON"
    "3333";"MOTO";"TATA";"PARIS-"NANTES"

    Dans mon ETL, j'ai définit un délimiteur de champ qui est ';' et un délimiteur de texte qui est ' " '
    Dans mon exemple ci-dessus, il y a une erreur dans la dernière ligne (" en trop).

    Je voudrai donc extraire et supprimer la ligne en erreur qui contient un " en trop.

    Est-il possible de faire ça en batch ou autre ?
    Si oui, comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Salut,

    si la structure de ton CSV est la même à savoir le test se fait sur le dernier champs alors tu peux essayer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr -vi ";[\"][A-Z0-9\-]*[\"][A-Z0-9\-]*[\"]$"  .\file.csv
    sinon tu peux déplacer le point-virgule ";" en fin de l'expression pour matcher le pattern au debut de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "^[\"][A-Z0-9\-]*[\"][A-Z0-9\-]*[\"];"
    ou bien borner l'expression par deux points-virgules ";"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ";[\"][A-Z0-9\-]*[\"][A-Z0-9\-]*[\"];"
    pour matcher tous les champs en milieu de la ligne

  3. #3
    Futur Membre du Club
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    Salut,

    si la structure de ton CSV est la même à savoir le test se fait sur le dernier champs alors tu peux essayer ceci:
    Justement non...
    L'erreur peut se trouver sur n'importe quel champs

  4. #4
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par Aymeric41 Voir le message
    Justement non...
    L'erreur peut se trouver sur n'importe quel champs
    d'accord, dans ce cas tu pourra utiliser les 3 regex's ensemble, une chose du genre:

    untested.bat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     >_0 findstr /vi ";[\"][A-Z0-9\-]*[\"][A-Z0-9\-]*[\"]$" .\file.csv   
     >_1 findstr /vi "^[\"][A-Z0-9\-]*[\"][A-Z0-9\-]*[\"];" _0
         findstr /vi ";[\"][A-Z0-9\-]*[\"][A-Z0-9\-]*[\"];" _1 
     del _?
    es-ce que ton fichier contient toujours 4 champs ?

  5. #5
    Futur Membre du Club
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Non, mon fichier comporte une vingtaine de champs et il peut y avoir 2 erreurs par ligne.

  6. #6
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par Aymeric41 Voir le message
    Non, mon fichier comporte une vingtaine de champs et il peut y avoir 2 erreurs par ligne.
    salut,

    essaye ceci, pas bien tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off
    
    set "delim=abcdefghijklmnopqrstuvwxyz"
    set "delim=%delim%ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    set "delim=%delim%0123456789-"
    
    for /f "delims=" %%a in (fichier.csv) do ((set ts=)
      for %%b in (%%a) do for /f "delims=%delim%" %%i in (%%b) do (
        if ^%%i==^" set ts=1)
        if not defined ts echo(%%a
    )
    
    pause
    source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    "1111";"VELO";"TOTO";"PARIS-MARSEILLE"
    "2222";"AUTO";"TUTU";"PARIS-LYON"
    "3333";"MOTO";"TATA";"PARIS-"NANTES"
    "4444";"AAAA";"TITI";"PARIS-BORDEAU"
    "5555";"U"UU";"TETE";"PARIS-"NICE"
    "6666";"NNNN";"JIJI";"PARIS-CAEN"
    "7777";"GGGG";"SISI";""PARIS-STRASBOURG"
    "8888";"OOOO";"DODO";"PARIS-PARIS"
    resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "1111";"VELO";"TOTO";"PARIS-MARSEILLE"
    "2222";"AUTO";"TUTU";"PARIS-LYON"
    "4444";"AAAA";"TITI";"PARIS-BORDEAU"
    "6666";"NNNN";"JIJI";"PARIS-CAEN"
    "8888";"OOOO";"DODO";"PARIS-PARIS"

  7. #7
    Futur Membre du Club
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Après avoir fait quelques tests, ça me détecte très bien les erreurs

    Juste une dernière question :
    Comment je peux rediriger ça dans un fichier ?

    Merci beaucoup de ton aide !

Discussions similaires

  1. Chercher une ligne particulière dans un fichier
    Par supcomingenieur dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/06/2013, 20h20
  2. Supprimer une ligne vide dans un fichier texte
    Par Tibà22 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/04/2011, 16h58
  3. Lire une ligne spécifique dans un fichier texte
    Par ZRemi dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/04/2010, 13h58
  4. Chercher une ligne aléatoire dans un fichier texte
    Par pyopyo dans le forum Langage
    Réponses: 1
    Dernier message: 30/04/2008, 09h26
  5. Réponses: 6
    Dernier message: 04/03/2004, 09h35

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