2010-12-22 8 views
8

En una configuración como la siguiente; ¿Hay alguna manera de manejar secciones individuales?boost :: program_options: cómo manejar varias secciones con el mismo nombre en el archivo INI

Estoy buscando una forma de validar las secciones individuales de "servidor" a continuación, de manera confiable.

[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 

Respuesta

13

Al utilizar boost::program_options a analizar un archivo INI, los nombres de las opciones debe estar prefijados por sus nombres de sección de cerramiento.

En otras palabras, las secciones son parte de la opción 'identificador', pero yo no creo que haya una manera de identificar a cual una variable dada pertenece server.ip sección (y por lo tanto, que se la asocia server.password) .

Creo que deberías considerar Boost.PropertyTree (que también admite el análisis de archivos INI) para esta tarea.

+0

+1 para Boost.PropertyTree –

+4

1 por sugerir Boost.PropertyTree –

2

De here:

Los nombres de las opciones son en relación con los nombres de las secciones, por lo que la parte siguiente fichero de configuración:

[gui.accessibility] 
    visual_bell=yes 

es equivalente a

gui.accessibility.visual_bell=yes 

Pero actualmente no existe forma de distinguir secciones con el mismo nombre.

UPDATE:

QSettings de Qt por lo general resuelve este por postfixing valores a partir de una matriz con "/ n" (secciones?). Lo que podría utilizar:

[server/0] 
... 
[server/1] 
... 
[server/2] 
... 
Cuestiones relacionadas