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

 C++ Discussion :

Lire fichier avec séparateur


Sujet :

C++

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut Lire fichier avec séparateur
    Bonjour à tous,

    Comment lire un fichier de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    109-201227    ;10        ;FUS;F109122710A    ;               ;04/07/12 18:39:00;05/07/12 01:39:00;744901-066-5                       ;744901;066
    F109-201227    ;15        ;FUS;F109122715B    ;F109122715A    ;06/07/12 13:09:00;06/07/12 20:09:00;701001-037-6                       ;701001;037
    Le séparateur étant ";" et il peut y avoir des champs vide.

    Merci

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour à toi,
    Tu as trois possibilités:
    • chercher le code d'un parser csv (comma separated value)
    • utiliser std::getline(istream, line,',') et la faq sur les fichiers
    • regarder du coté de boost::tokeniser

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Tu peux commencer par utiliser std::getline qui prend, comme troisième paramètre (optionnel), le caractère à utiliser comme séparateur.

    Ainsi, tu pourrais arriver à récupérer l'ensemble de tes données sous la forme d'une chaine avec une simple boucle proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::string str;
    std::ifstream ifs("NomDufichier.txt");
    std::vector<std::string> tab;
    while(std::getline(ifs,str,';')
    {
        tab.push_back(str);
    }
    Après il ne te restera plus qu'à supprimer les éventuels espaces surnuméraires ("trim").

    Comme il n'existe pas de fonction trim fournie par le standard, tu pourrais utiliser quelque chose comme
    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
     
    const std::string whiteSpaces( " \f\n\r\t\v" );
     
     
    void trimRight( std::string& str,
          const std::string& trimChars = whiteSpaces )
    {
       std::string::size_type pos = str.find_last_not_of( trimChars );
       str.erase( pos + 1 );    
    }
     
     
    void trimLeft( std::string& str,
          const std::string& trimChars = whiteSpaces )
    {
       std::string::size_type pos = str.find_first_not_of( trimChars );
       str.erase( 0, pos );
    }
     
     
    void trim( std::string& str, const std::string& trimChars = whiteSpaces )
    {
       trimRight( str, trimChars );
       trimLeft( str, trimChars );
    }
    La fin du travail consistera, enfin, à convertir les données dans les bons types
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je pense que c'est plus complexe que celà, chaque ligne de son fichier est une entrée, qu'il doit parser.

    J'imagine qu'il va devoir utiliser getline classiquement pour obtenir chaque ligne, puis en faire un istringstream sur lequel il executera getline(..., ..., ';').

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut
    J'ai utilisé une "QStringList".

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

Discussions similaires

  1. lire fichier avec plus de 65536lignes
    Par Timar dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/09/2009, 18h00
  2. Réponses: 6
    Dernier message: 19/08/2009, 14h03
  3. [Grep] RegEx sur fichier avec séparateur ";"
    Par Ticoche dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 20/02/2009, 16h12
  4. Réponses: 29
    Dernier message: 27/08/2008, 09h41
  5. lire fichier avec l'extension .c ou .h en c
    Par lolomesnil dans le forum C
    Réponses: 1
    Dernier message: 13/04/2007, 10h18

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