当前位置: 首页 > 工具软件 > yaml-cpp > 使用案例 >

linux安装yaml-cpp,YAML开源库yaml-cpp简介及使用

拓拔泉
2023-12-01

关于YAML的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/88090609

yaml-cpp是用c++实现的用来解析和生成yaml文件的,源码地址在https://github.com/jbeder/yaml-cpp ,这里使用的是最新发布的稳定版0.6.2.

解析和产生yaml文件的测试代码如下:

#include "funset.hpp"

#include

#include

#include

int test_parse_yaml_file()

{

#ifdef _MSC_VER

YAML::Node config = YAML::LoadFile("E:/GitCode/Messy_Test/testdata/test_yaml-cpp.yml");

#else

YAML::Node config = YAML::LoadFile("testdata/test_yaml-cpp.yml");

#endif

std::string blog_name{"xxxxx"}, blog_id{"xxxxx"}, blog_url{"xxxxx"};

if (config["blog"]) {

if (config["blog"]["name"])

blog_name = config["blog"]["name"].as<:string>();

if (config["blog"]["id"])

blog_id = config["blog"]["id"].as<:string>();

if (config["blog"]["url"])

blog_url = config["blog"]["url"].as<:string>();

} else {

fprintf(stderr, "the node blog doesn't exist\n");

}

fprintf(stdout, "blog name: %s, id: %s, url: %s\n",

blog_name.c_str(), blog_id.c_str(), blog_url.c_str());

bool value1, value2;

if (config["value1"])

value1 = config["value1"].as();

if (config["value2"])

value2 = config["value2"].as();

fprintf(stdout, "value1: %d, value2: %d\n", value1, value2);

int number1;

std::string number2, number3;

float number4;

if (config["number1"])

number1 = config["number1"].as();

if (config["number2"])

number2 = config["number2"].as<:string>();

if (config["number3"])

number3 = config["number3"].as<:string>();

if (config["number4"])

number4 = config["number4"].as();

fprintf(stdout, "number1: %d, number2: %s, number3: %s, number4: %f\n",

number1, number2.c_str(), number3.c_str(), number4);

std::string github_url, github_repos;

if (config["github"])

github_url = config["github"][0].as<:string>();

github_repos = config["github"][1].as<:string>();

fprintf(stdout, "github url: %s, repos: %s\n", github_url.c_str(), github_repos.c_str());

return 0;

}

int test_generate_yaml_file()

{

YAML::Node node;

node["language"] = "cpp";

node["version"] = 2;

node["url"].push_back("https://blog.csdn.net/fengbingchun");

node["url"].push_back("https://github.com/fengbingchun");

YAML::Node primes = YAML::Load("[2, 3, 5, 7, 11]");

primes.push_back(13);

fprintf(stdout, "primes size: %d\n", primes.size());

node["primes"] = primes;

YAML::Node lineup = YAML::Load("{1B: Prince Fielder, 2B: Rickie Weeks, LF: Ryan Braun}");

lineup["RF"] = "Corey Hart";

lineup["C"] = "Jonathan Lucroy";

node["name"] = lineup;

node["platform"]["linux"].push_back("x86");

node["platform"]["linux"].push_back("x86_64");

node["platform"]["linux"].push_back("armv7");

node["platform"]["windows"].push_back("x86");

node["platform"]["windows"].push_back("x86_64");

#ifdef _MSC_VER

std::ofstream fout("E:/GitCode/Messy_Test/testdata/tmp.yml");

#else

std::ofstream fout("testdata/tmp.yaml");

#endif

fout << node;

return 0;

}

test_yaml-cpp.yml内容如下:

# config file

---

blog:

name: csdn

id: fengbingchun

url: https://blog.csdn.net/fengbingchun

commands:

version:

- g++ --version

- cmake --version

- git --version

value1: true

value2: false

value3: ~

number1: 123

number2: !!str 123

number3: "123"

number4: !!float 123

github:

- https://github.com/fengbingchun

- NN_Test Face_Test OpenCV_Test

Messy_Test CUDA_Test

data1: |

There once

was a

short man

data2: >

There once

was a

short man

date1: 2019-03-03

step: &id001   # defines anchor label &id001

instrument:  Lasik 2000

pulseEnergy: 5.4

step2: *id001   # refers to the first step (with anchor &id001)

...

解析yaml文件输出结果如下:

产生yaml文件的内容如下:

GitHub: https://github.com/fengbingchun/Messy_Test

 类似资料: