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

Boost C++ Discussion :

Echapper # dans fichier ini


Sujet :

Boost C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut Echapper # dans fichier ini
    Bonjour,

    J'utilise boost::program_options pour parser un fichier ini. Le problème est qu'un des paramètres de mon fichier contient un # et parse_config_file le considère comme un début de commentaire. J'ai essayé de l'échapper avec un \ et même en doublant le #, mais ça n'a pas fonctionné.

    Est-ce que quelqu'un sait comment faire ? 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
    Essaie de mettre le tout entre guillemets, sinon, il faut créer un parser spécialisé.

    Autre possibilité, contourner le probleme. tu mets un @ plutot qu'un # dans ton fichier, et à la lecture de la valeur, tu fais un prétraitement pour remplacer le @ par un #

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut
    Merci pour votre réponse.

    Citation Envoyé par leternel Voir le message
    Essaie de mettre le tout entre guillemets, sinon, il faut créer un parser spécialisé.
    J'ai essayé aussi avec des guillemets (simples ou doubles), le résultat est le même.

    Citation Envoyé par leternel Voir le message
    Autre possibilité, contourner le probleme. tu mets un @ plutot qu'un # dans ton fichier, et à la lecture de la valeur, tu fais un prétraitement pour remplacer le @ par un #
    Certes, mais lorsqu'un utilisateur voudra mettre un @ quelque part, je serai bloqué de la même façon.

    Si boost n'y arrive pas (je suis choqué), peut-être faudra-t-il passer par un autre parser comme celui-ci : inih par exemple. Mais j'aimerais bien limiter le nombre de dépendances, et comme j'ai besoin de boost pour plein d'autres choses...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut
    Pour ceux que ça intéresse, apparemment, Qt le fait aussi avec QSettings, sûrement plus répandu que la lib indiquée dans mon dernier message.

  5. #5
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Citation Envoyé par Tan Phi Voir le message
    Pour ceux que ça intéresse, apparemment, Qt le fait aussi avec QSettings, sûrement plus répandu que la lib indiquée dans mon dernier message.
    Plus repandu certainement pas, tout ceux qui ne font pas du GUI evitent Qt.

    Tu as Boost.PropertyTree qui fait le boulot que tu veux.
    Personellement je n'utilise Boost.ProgramOption QUE pour les options du programme, et Boost.PropertyTree pour les fichiers de configuration. La difference c'est que le premier est changeable en ligne de commande. Si tu voulais juste un fichier de config, utilise Boost.ProgramOption pour recuperer le nom du fichier, et Boost.PropertyTree pour le lire.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Plus repandu certainement pas, tout ceux qui ne font pas du GUI evitent Qt.
    Je suis bien d'accord. D'ailleurs pour l'instant, je n'ai pas de GUI non plus. Comme dit plus haut, j'aimerais éviter les dépendances inutiles.

    Citation Envoyé par Klaim Voir le message
    Tu as Boost.PropertyTree qui fait le boulot que tu veux.
    Je ne connaissais pas, mais effectivement c'est prometteur. En plus ça parse le JSON on dirait, et j'en ai besoin également.

    Merci à tous pour vos réponses.

  7. #7
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Citation Envoyé par Tan Phi Voir le message
    Je ne connaissais pas, mais effectivement c'est prometteur. En plus ça parse le JSON on dirait, et j'en ai besoin également.
    Alors, non, attention: sa se serialize en JSON mais ca ne parse pas n'importe quel JSON standard. Ce n'est pas une lib JSON, ca ne fais que mettre son propren format dans du JSON si tu lui demandes.

    Par exemple, tu peux pas (sans hacks) avoir de null dans le JSON lu par property tree.

    Donc si tu as besoin de JSON, prends une lib JSON. Si tu vas par la autant faire les fichiers de config en JSON aussi et ne pas utilser boost.property_tree mais la lib JSON. Il n'y en a pas pour l'instant dans boost mais il y en a une de prevu tres bientot.
    Voir: http://stackoverflow.com/questions/2...-c-json-parser

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut
    Je saisis bien la nuance dans ce que tu dis, mais pourtant ceci laisse bien croire qu'il y a un parser. Il y est même question de la valeur null.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut
    Ok en lisant mieux, je vois que les null, true et false sont simplement considérés comme des string.

  10. #10
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Citation Envoyé par Tan Phi Voir le message
    Je saisis bien la nuance dans ce que tu dis, mais pourtant ceci laisse bien croire qu'il y a un parser. Il y est même question de la valeur null.
    Alors non tu n'as pas completement saisi la nuance mais je te rassure elle est pas evidente: d'abord le code de serialization pour JSON de property_tree ne gere pas null correctement, parceque dans ton code c++ tu vas avoir un string au lieu d'un objet null. Du coup ya pas moyen de faire la difference entre null et "null". Cela dis ils ont peut etre corrige le probleme depuis la derniere fois que j'ai tente ca ya deux ans. Tu ne pouvais pas non plus setter une valeur null dans un property tree depuis C++.

    Sinon ce que je voulais dire c'est que PropertyTree ne va gerer que ce qu'il connait, pas tout JSON. Ya des tas de trucs dans le language JSON que le parseur de Property Tree va pas reconnaitre ou mal reconnaitre (ya d'autres trucs mais je m'en souviens plus).

    Donc, si tu veux utiliser JSON il te faut une lib qui genre le JSON, pas seulement le sous ensemble que gere PropertyTree.

    Cela etant dis, si c'est juste pour de la config simple, property tree est suffisant. Si tu fais du code qui va partir vers un serveur web, ca sera pas suffisant, il te faudra une lib qui connait completement JSON.

    C'est vrai aussi pour le parseur XML de property tree: meme si ya du RapidXML en dessous, PropertyTree va organiser les choses a sa facon et limiter ce que tu peux faire, par rapport a une lib XML complete. C'est un sous ensemble general, pas un language particulier.

  11. #11
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par défaut
    Sinon écrire un parser d'ini ça se fait rapidement quand même, j'en ai codé un récemment pour remplacer une dépendance vers une lib d'xml qui nous pourrissait la vie, ça m'a vraiment pris très peu de temps (moins de 2h), et encore j'ai agrémenté d'une interface confortable pour le C++11.

    Et si le parser de boost prend tous les # pour des débuts de commentaires il est clairement buggé.

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/02/2009, 03h39
  2. Rechercher valeur dans fichier ini?
    Par jojo86 dans le forum Langage
    Réponses: 10
    Dernier message: 06/02/2009, 12h10
  3. Résultat d'une requête dans fichier ini
    Par bruno28 dans le forum VBA Access
    Réponses: 6
    Dernier message: 13/06/2007, 16h29
  4. Parametre dans fichier ini pour base fractionnée
    Par sunvialley dans le forum Access
    Réponses: 5
    Dernier message: 28/07/2006, 14h38
  5. [C#] Comment lire/ecrire dans fichier ini ?
    Par meli0207 dans le forum C#
    Réponses: 2
    Dernier message: 20/03/2006, 16h53

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