boost :: program_options - как обрабатывать несколько разделов с одинаковыми именами в INI-файле - PullRequest
8 голосов
/ 22 декабря 2010

В конфиге, как показано ниже; Есть ли способ обработки отдельных разделов.

Я ищу способ достоверной проверки отдельных разделов "сервер" ниже.

[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

Ответы [ 2 ]

13 голосов
/ 22 декабря 2010

При использовании boost::program_options для синтаксического анализа INI-файла, имена параметров должны * иметь префикс перед именами входящих в них разделов.

Другими словами, разделы являются частью идентификатора параметра '', но я не думаю, что у вас есть способ определить , к какому разделу относится данная переменная server.ip (и, следовательно, к которой относится server.password).

Iдумаю, что вы должны рассмотреть Boost.PropertyTree (который также поддерживает синтаксический анализ файла INI) для этой задачи.

2 голосов
/ 22 декабря 2010

С здесь :

Имена параметров относятся к именам разделов, поэтому следующая часть файла конфигурации:

  [gui.accessibility]
  visual_bell=yes

эквивалентна

  gui.accessibility.visual_bell=yes

Но в настоящее время нет способа отличить разделы с одинаковыми именами.

ОБНОВЛЕНИЕ:

QSettings Qt обычно решает эту проблему путем постфиксации значений (разделов?) Из массива с"/ п".Таким образом, вы можете использовать:

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