C++ 修改YAML文件的一个node节点

本文介绍如何使用C++在YAML文件中修改特定节点,特别是针对相机到激光的外参文件,重点是更新rotation节点的w、x、y、z值,同时保持其余节点不变。实现过程中,首先读取yaml文件,然后进行修改,最后保存文件。参考了Stack Overflow上的相关解答。
摘要由CSDN通过智能技术生成

这是相机到激光的外参文件,我需要更改rotation的w,x,y,z,但是不改其他的node

header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: velodyne128
child_frame_id: right_front
transform:
  translation:
    x: 0.51
    y: 0.31
    z: -0.10
  rotation:
    w: 0.20917936691977584
    x: -0.393691854453879
    y: 0.74159674408047471
    z: -0.50128333840348849
YAML::Node _baseNode = YAML::LoadFile("right_front_extrinsics.yaml");
_baseNode["transform"]["rotation"]["w"]= q.w;
_baseNode["transform"]["rotation"]["x"]= q.x;
_baseNode["transform"]["rotation"]["y"]= q.y;
_baseNode["transform"]["rotation"]["z"]= q.z;
ofstream fout("right_front_extrinsics.yaml"); //保存
fout << _baseNode;
 
fout.close();

需要注意的是,这里先加载yaml文件,再覆盖,最后写入。

参考:C++ YAML: How to edit/write to a node in a .yaml file - Stack Overflow

要在C++中读写YAML文件,您可以使用第三方库来处理YAML格式。以下是使用`yaml-cpp`库读写YAML文件的简单示例: 首先,您需要安装`yaml-cpp`库。您可以从https://github.com/jbeder/yaml-cpp下载源代码,并根据其提供的说明进行安装。 接下来,您可以使用以下代码示例来读取YAML文件: ```cpp #include <iostream> #include <fstream> #include <yaml-cpp/yaml.h> int main() { // 打开YAML文件 std::ifstream file("example.yaml"); // 解析YAML文件 YAML::Node config = YAML::Load(file); // 读取YAML中的数据 std::string name = config["name"].as<std::string>(); int age = config["age"].as<int>(); // 打印读取的数据 std::cout << "Name: " << name << std::endl; std::cout << "Age: " << age << std::endl; return 0; } ``` 在上面的示例中,我们打开了名为`example.yaml`的YAML文件,并使用`YAML::Load`函数解析了文件内容。然后,我们可以使用`[]`操作符来访问读取的数据,并使用`as`函数将其转换为适当的类型。 如果您想要将数据写入YAML文件,可以使用以下代码示例: ```cpp #include <iostream> #include <fstream> #include <yaml-cpp/yaml.h> int main() { // 创建一个YAML节点 YAML::Node config; config["name"] = "John"; config["age"] = 25; // 打开要写入的YAML文件 std::ofstream file("output.yaml"); // 将YAML节点写入文件 file << config; return 0; } ``` 在上面的示例中,我们创建了一个名为`config`的YAML节点,并设置了两个属性。然后,我们打开了名为`output.yaml`的文件,并使用`<<`操作符将YAML节点写入文件。 这些示例演示了如何使用`yaml-cpp`库在C++中读写YAML文件。请确保在编译时链接`yaml-cpp`库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值