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 :

Parser un fichier


Sujet :

C++

  1. #1
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut Parser un fichier
    Bonjour,

    Je dois parser un fichier du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    champ1:
      a=2
      b=4
      champ2:
        c=6
      end champ2
    end champ1
    champ3:
      d=4
    end champ3
    Quelqu'un connaitrait-il une librarie, voire une méthode simple pour gérer cela en C++ ?

    J'ai commencé à regarder avec google et sur ce forum. Par ailleur, boost:spririt pourrait-il convenir ? Si oui, existe-t-il des tutoriaux qui correspondent à mon besoin ?

    Merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Je pense que le format est assez simple pour le parser à l'aide de std::getline puis std::istringstream.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::string line;
    while(std::getline(file, line))
    {
        std::istringstream parser(line);
        parser >> ...;
    }

  3. #3
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Oui, bien sur. A priori, j'osais espérer qu'il existe quelque chose d'existant.
    Par exemple pour gérer la notion de pile pour les données imbriquées.

  4. #4
    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,

    Les bibiotheques boost::serialize, boost::spirit et autres devraient pouvoir t'être d'un secours certain...

    Sinon, de fait, si tu sais clairement quelle sera la structure du fichier, la lecture ligne par ligne ou chaine par chaine peut te permettre de créer un parser qui t'est propre...

    J'ai donné sur ==>ce post<== certaines explications sur lesquelles tu peux te baser pour la création de ton propre parser
    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

  5. #5
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    sinon sur boost::spirit pas de tutoriels, wikipedia, etc... ?

  6. #6
    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
    Ben, si l'anglais te convient, tu peux toujours aller voir ==>directement sur le site<==
    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

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Bonsoir,


    C' est un modèle fixe ou variable à analyser ?
    Les données imbriquées sont-elles représentables par une structure C ou C++ ? .

    Le fichier est-il de type texte ou typé ? C' est important car std::getline( file , line ) ne tourne qu' avec un fichier texte. Autrement ce sont des fstream::read, fstream::seekg etc ...

    Salut.

  8. #8
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    C'est un fichier texte, j'ai commencé des champs avec std::getline( file , line) mais c'est lourd...

    Le modèle est variable (comme décrit plus haut).

    Au sujet du site de boost::spirit, j'avais bien repéré le site.
    J'avoue que je me suis découragé en lisant tout ce que cela pouvait faire et en ne voyant pas comment décrire mon besoin.
    J'espérais que quelqu'un avait déjà eu une petite expérience pour un problème comparable.

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Bonjour,

    C' est vrai que pour un truc spécialisé boost::spirit ça va prendre du temps, télécharger, lire...

    Si le fichier est texte et que l' on peut représenter le modèle par une structure C ou C++, le découpage avec std::getline et les std::istringstream est le plus simple et pas si lourd.

    Maintenant reste à connaître le délimiteur des différentes unités à analyser.

    Attention std::istringstream est un faux ami pour les std::string ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    std::string result ;
    std::string s1( "toto") ;
    std::istringstream is ( s1 ) ;
    is >> result ;  // ok toto
    // mais 
    std::string s1( "toto tutu") ;
    std::istringstream is ( s1) ;
    is >> result ; // raté tutu a disparu
    Mais au fait ton analyse d' unités tu la réinjectes dans quoi ?

    Salut.

  10. #10
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Meric pour vos conseils, bien que je ne pense pas avoir de trop de souci avec getline() ni istringstream().

    Si quelqu'un a des info sur "spirit"...

  11. #11
    Membre éclairé Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Par défaut
    Peut-être qu'une solution flex / bison serait aussi une bonne idée.

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ce qui est comme boost.spirit mais en moins bien...

  13. #13
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Bon, ben pas d'utilisateur de boost::spirit ?

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si, mais ça t'empêche pas de lire la doc.

  15. #15
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Dernier rappel: personne n'a d'expérience en boost::spirit ?

  16. #16
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Pourquoi tu continues à poser la même question alors que je t'ai répondu ?

Discussions similaires

  1. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12
  2. parser un fichier .dtd
    Par bgranou dans le forum Valider
    Réponses: 2
    Dernier message: 04/06/2004, 19h53
  3. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08
  4. parser un fichier avec xerces
    Par traiangueul dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 02/02/2004, 18h14
  5. parser un fichier html
    Par noarno dans le forum ASP
    Réponses: 2
    Dernier message: 10/12/2003, 17h53

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