我使用boost::property_tree解析ini文件。
我希望能够做到以下几点:
data.ini:
[electron]
position=0,0,0
velocity=0,0,0
[proton]
position=1,0,0
velocity=0,0,0
[proton]
position=-1,0,0
velocity=0,0,0目前该程序运行,并给出了这个错误:duplicate section name显然是因为有两个[proton]部分。
有其他方法来解析像这样的文件吗?我应该使用xml文件吗?
发布于 2013-03-02 19:58:41
这里有一个简单的阅读器,以防您需要它:
XML-file:
<?xml version="1.0" encoding="utf-8"?>
<data>
<electron>
<position>0,0,0</position>
<velocity>0,0,0</velocity>
</electron>
<proton>
<position>1,0,0</position>
<velocity>0,0,0</velocity>
</proton>
<proton>
<position>-1,0,0</position>
<velocity>0,0,0</velocity>
</proton>
</data>JSON-file:
{
"electron": {
"position": "0,0,0",
"velocity": "0,0,0"
},
"proton": {
"position": "1,0,0",
"velocity": "0,0,0"
},
"proton": {
"position": "-1,0,0",
"velocity": "0,0,0"
}
}阅读XML & JSON质子节点:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <algorithm>
#include <iostream>
int main()
{
// XML
{
boost::property_tree::ptree pt;
boost::property_tree::read_xml("prop_data.xml", pt);
for(auto& el : pt.get_child("data.proton"))
{
std::cout << el.second.data() << std::endl;
}
}
// JSON
{
boost::property_tree::ptree pt;
boost::property_tree::read_json("prop_data.json", pt);
for(auto& el : pt.get_child("proton"))
{
std::cout << el.second.data() << std::endl;
}
}
return 0;
}编辑:可以为JSON使用数组,例如:
...
"position": [-1, 0, 0],
...以及读取此数组值的代码:
for(auto& el : pt.get_child("proton"))
{
std::cout << el.first << std::endl;
for(auto& a : el.second) {
std::cout << a.second.data() << std::endl;
}
std::cout << std::endl;
}这里,el.second只是一个ptree,您可以使用for循环迭代它。
https://stackoverflow.com/questions/15178354
复制相似问题