如何使用yaml-cpp解析文件

时间:2019-01-30 11:40:29

标签: c++ parsing dictionary yaml yaml-cpp

我有一个看起来像这样的yaml文件:

construction_cone_1:
  model: construction_cone
  model_type: sdf
  position: [ 1.2, 3.4, 0.0 ]
  orientation: [ 0.0, 0.0, 0 ]

construction_cone_2:
  model: construction_cone
  model_type: sdf
  position: [ 3.0, 7.0, 0.0 ]
  orientation: [ 0.0, 0.0, 0 ]

...

我正在按照this教程在我的c ++应用程序中对其进行解析。

到目前为止,我了解的是,由于结构化,文件已作为映射加载到YAML::Node中。所以,我想,一种很好的阅读方法是:

YAML::Node map = YAML::LoadFile(file_path);
  for(YAML::const_iterator it=map.begin(); it!=map.end(); ++it){
    const std::string &key=it->first.as<std::string>();

这给我第一个条目“ construction_cone_1”,依此类推。通过遵循这种逻辑,我无法弄清楚如何读取其余部分。特别是,对于地图的每个条目,我都有兴趣读取对象的位置。

如果有人可以帮助我解决这个问题,我将感到非常高兴。

谢谢。

1 个答案:

答案 0 :(得分:1)

我想我低估了图书馆的力量。事实证明,这样做可以解决问题:

  YAML::Node map = YAML::LoadFile(filename);
  for(YAML::const_iterator it=map.begin(); it!=map.end(); ++it){
    const std::string &key=it->first.as<std::string>();

    Eigen::Vector2f pos;
    YAML::Node attributes = it->second;
    YAML::Node position = attributes["position"];
    for(int i=0; i<2; ++i){
      pos(i) = position[i].as<float>();
    }

    ...
  }