用Boost.Program_options处理INI文件的部分
问题描述:
我想解析Linux中的配置INI文件。 我想用Boost,有人指给我program options
库。用Boost.Program_options处理INI文件的部分
问题是我可以读取具有语法field=value
的行,但是如何处理不同的部分,即其中有[Section_Name]
的行? 以下代码我总是有个例外
下面的代码我试过了。 感谢AFG
const char* testFileName = "file.ini";
std::ifstream s;
s.open( testFileName);
namespace pod = boost::program_options::detail;
std::set<std::string> options;
options.insert("a");
options.insert("b");
options.insert("c");
//parser
for (pod::config_file_iterator i(s, options), e ; i != e; ++i)
{
std::cout << i->value[0] << std::endl;
}
答
正如前面由etarion所述,选择的标识符必须可以通过封闭部分前缀。这里是你的代码简单的修改来演示:
int main()
{
std::stringstream s(
"[Test]\n"
"a = 1\n"
"b = 2\n"
"c = test option\n");
std::set<std::string> options;
options.insert("Test.a");
options.insert("Test.b");
options.insert("Test.c");
for (boost::program_options::detail::config_file_iterator i(s, options), e ; i != e; ++i)
std::cout << i->value[0] << std::endl;
}
该程序的输出:
1
2
test option
答
我使用的是从program_options
parse_config_file
,所以它可能是不同的,但有选项的名称是SectionName.name
如果您有类似的[SectionName]
name=value
。
std::string config_filename = "foo.ini";
namespace po = boost::program_options;
po::options_description my_options("Options");
int my_opt;
my_options.add_options()
("SectionName.my_opt", po::value(&my_opt)->default_value(64), "My option");
std::ifstream config_stream(config_filename.c_str());
po::variables_map vm;
po::store(po::parse_config_file(config_stream, my_options), vm);
po::notify(vm);
// value is now in my_opt, also accessible by vm["SectionName.my_opt"].as<int>()
+0
另外这是一个非常样本。我已经有了能够轻易实现真正价值的论点。谢谢 – 2010-12-10 14:45:43
很酷!非常感谢!我误读了,我错过了部分名称。非常感谢! – 2010-12-10 14:44:31