2010-12-22 5 views
8

Dans une configuration comme ci-dessous; existe-t-il un moyen de gérer des sections individuelles.boost :: program_options - comment gérer plusieurs sections avec le même nom dans le fichier INI

Je suis à la recherche d'un moyen de valider les sections individuelles du "serveur" ci-dessous, de manière fiable.

[basic] 
number_of_servers=3 

[server] 
ip=10.20.30.40 
password=sdfslkhf  

[server] 
ip=10.20.30.41 
password=sdfslkhf 

[server] 
ip=10.20.30.42 
password=sdfslkhf 

[server] 
password=sdfslkhf 

[server] 
ip=10.20.30.42 

Répondre

13

Lorsque vous utilisez boost::program_options pour analyser un fichier INI, les noms d'options doivent être préfixés par le nom de la section englobante.

En d'autres termes, les sections font partie de l'option « identifiant », mais je ne pense pas que vous avez un moyen d'identifier la section à qui une variable server.ip donnée appartient (et donc, qui est l'associé server.password) .

Je pense que vous devriez considérer Boost.PropertyTree (qui prend également en charge l'analyse de fichier INI) pour cette tâche.

+0

+1 pour Boost.PropertyTree –

+4

+1 pour suggérer Boost.PropertyTree –

2

De here:

Les noms des options sont par rapport aux noms de section, de sorte que la partie du fichier de configuration suivante:

[gui.accessibility] 
    visual_bell=yes 

équivaut à

gui.accessibility.visual_bell=yes 

Mais il n'y a pas actuellement façon de distinguer les sections avec le même nom.

MISE À JOUR:

QSettings de Qt résout habituellement ce par des valeurs postfixant d'un tableau avec "/ n" (sections?). Vous pouvez donc utiliser:

[server/0] 
... 
[server/1] 
... 
[server/2] 
... 
Questions connexes