【问题标题】:C++ YAML: How to edit/write to a node in a .yaml fileC++ YAML:如何编辑/写入 .yaml 文件中的节点
【发布时间】:2015-01-27 13:20:29
【问题描述】:

我正在尝试编写一个函数,该函数将使用yaml-cpp 在我的.yaml 文件中写入/编辑一个节点。我有点让它工作,因为我的代码将编辑本地副本。当我打印出_baseNode 时,它显示该节点的值是 5.4。但是,退出函数并在我的计算机上检查我的.yaml 后,值 5.4 不存在。

这是我的尝试(_baseNode 是我班级的私人成员):

void ParametersServerPC::testFunc2() {

    boost::filesystem::path path(boost::filesystem::initial_path() / _parameterFileName);
    _baseNode = YAML::LoadFile(_parameterFileName);

    _baseNode["chip"]["clock_rate"]["3"] = 5.4;

    std::cout << _baseNode << std::endl;

}

对于我的第二次尝试,我创建了一个YAML::Node&amp; baseNode

YAML::Node& baseNode = YAML::LoadFile(_parameterFileName);

然后我得到这个错误:

invalid initialization of non-const reference of type 'YAML::Node&' from an rvalue of type 'YAML::Node'

对于那些感兴趣的人,.yaml 文件看起来像这样:

chip:
  clock_rate:
    0: 1.0
    1: 1.0
    2: 1.0
    3: 3.0
    4: 1.0

我想将 3 映射的值从 3.0 更改为 5.4。

【问题讨论】:

标签: c++ yaml yaml-cpp


【解决方案1】:

就像@filmor 在 cmets 中所说的那样,LoadFile 仅将数据加载到内存中,不提供文件系统接口。

因此,编辑.yaml 文件,您必须首先编辑文件的根节点并将其转储回文件中,如下所示:

YAML::Node node, _baseNode = YAML::LoadFile("file.yaml"); // gets the root node
_baseNode["change"]["this"]["node"] = "newvalue"; // edit one of the nodes 
std::ofstream fout("fileUpdate.yaml"); 
fout << _baseNode; // dump it back into the file

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多