gpt4 book ai didi

c++ - 使用 boost::property_tree 读取 ini 文件不适用于表单 A.x 的子项

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:03 26 4
gpt4 key购买 nike

我有一个以下格式的文件,我正在尝试使用 boost::property_tree::read_ini 和 boost::property_tree 来解析。

示例配置文件(一些值包含空格)

[Config] 
A = 1000
B.x = Test
B.y = Test By
C.x.y = Test_Cxy
C.x.z = Test Cxz
[Config2]
...

示例代码

 boost::property_tree::ptree config;
boost::property_tree::read_ini (name, config);

// Correctly Iterates through and displays correct pairs
for (ptree::const_iterator it = pt.begin(); it != end; ++it) {
std::cout << it->first << ": " << it->second.get_value<std::string>() << std::endl;
print(it->second);
}

const boost::property_tree::ptree& configTree = config.get_child("Config");


// Correctly gets A
std::string test_ = configTree.get<std::string>("A", "Default");

// Doesn't get B.x
std::string test_ = configTree.get<std::string>("B.x", "Default");

我做错了什么?如何正确获取 B.x、B.y 等? B.x 是否被视为 B 的 child ?因此我需要获取 B 的 get_child?

最佳答案

属性树是一种分层数据结构,其中每个节点都可以有一个有序的子节点序列。从这个意义上说,属性树比平面 ini 文件更类似于 XML。虽然它可以从 ini 文件和 XML 初始化,但它代表的内部数据都是一样的,查询“x.y.z”具有选择 x 的 y 子节点的 z 子节点的特殊含义。

它归结为属性树的 string_path 类,它具有默认分隔符

/// Default path class. A path is a sequence of values. Groups of values
/// are separated by the separator value, which defaults to '.' cast to
/// the sequence's value type. The group of values is then passed to the
/// translator to get a key.

总的来说,要么在使用 ini 文件时避免在项目名称中使用点,要么通过显式构建路径来更改分隔符:

configTree.get<std::string>(ptree::path("B.x", '/')); // using non-default separator

关于c++ - 使用 boost::property_tree 读取 ini 文件不适用于表单 A.x 的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20990830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com