boost - how to get properties within subsections of a ini file with boos property tree? -


i trying use boost property trees read inifiles containing properties within sections have "composed" path name.

for example inifile looks this:

[my.section.subsection1] someprop1=0  [my.section.subsection2] anotherprop=1 

i read following code:

namespace pt = boost::property_tree;  pt::ptree proptree; pt::read_ini(filepath, proptree); boost::optional<uint32_t> someprop1 = pt.get_optional<uint32_t>("my.section.subsection1.someprop1"); 

the problem never value of someprop1...

when iterate on first tree level see the entire section name my.section.subsection1 key. there way make read_ini function parse section names dots tree hierarchy?

if want property tree reflect hierarchy, requires writing custom parser. per ini parser documentation:

ini simple key-value format single level of sectioning. [...] not property trees can serialized ini files.

because of single level sectioning, my.section.subsection1 must treated key, rather hierarchy path. example, my.section.subsection1.someprop1 path broken down into:

           key    separator  value   .----------^---------. ^ .---^---. |my.section.subsection1|.|someprop1| 

because "." part of key, boost::property_tree::string_path type must explicitly instantiated different separator. available path_type typedef on ptree. in case, have opted use "/":

 ptree::path_type("my.section.subsection1/someprop1", '/') 

with example.ini containing:

[my.section.subsection1] someprop1=0  [my.section.subsection2] anotherprop=1 

the following program:

#include <iostream>  #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp>  int main() {   namespace pt = boost::property_tree;   pt::ptree proptree;    read_ini("example.ini", proptree);    boost::optional<uint32_t> someprop1 = proptree.get_optional<uint32_t>(     pt::ptree::path_type( "my.section.subsection1/someprop1", '/'));   boost::optional<uint32_t> anotherprop = proptree.get_optional<uint32_t>(     pt::ptree::path_type( "my.section.subsection2/anotherprop", '/'));   std::cout << "someprop1 = " << *someprop1            << "\nanotherprop = " << *anotherprop           << std::endl; } 

produces following output:

someprop1 = 0 anotherprop = 1 

Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -