源码下载:https://github.com/jbeder/yaml-cpp
步骤主要如下:进入源码目录后
- mkdir build
- cd build
- cmake …
- make
- make install
- #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
(); - if (config["blog"]["id"])
- blog_id = config["blog"]["id"].as
(); - if (config["blog"]["url"])
- blog_url = config["blog"]["url"].as
(); - }
- 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<bool>();
- if (config["value2"])
- value2 = config["value2"].as<bool>();
-
- fprintf(stdout, "value1: %d, value2: %d\n", value1, value2);
-
- int number1;
- std::string number2, number3;
- float number4;
- if (config["number1"])
- number1 = config["number1"].as<int>();
- if (config["number2"])
- number2 = config["number2"].as
(); - if (config["number3"])
- number3 = config["number3"].as
(); - if (config["number4"])
- number4 = config["number4"].as<float>();
- 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
(); - github_repos = config["github"][1].as
(); - 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;
- }
yml文件内容如下所示:
- 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)