C++ yaml_01
Date: 2020-10-19Last modified: 2023-04-05
Table of contents
YAML::Node config;
// Vai salvar na ordem de criação
config["key2"] = 2;
config["key3"] = 3.141592;
config["key1"] = "value1";
config["sequence1"].push_back(30);
config["sequence1"].push_back(20);
config["sequence1"].push_back(10);
config["sequence1"].push_back("string");
config["sequence1"].push_back(50);
if (config["sequence1"].IsSequence()) {
cout << "sequence1 é uma sequência" << endl;
}
if (config["key1"].IsScalar()) {
cout << "key1 é um escalar" << endl;
}
if (config.IsMap()) {
cout << "config é um mapa" << endl;
}
config["aliaskey"] = config["key1"];
ofstream out("config.yaml");
out << config;
out.close();
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
YAML::Node config2 = YAML::LoadFile("config.yaml");
if (config2["key1"] and config2["key2"] and config2["key3"]) {
cout << "key1: " << config2["key1"].as<string>() << endl;
cout << "key2: " << config2["key2"].as<int>() << endl;
cout << "key3: " << config2["key3"].as<float>() << endl;
}
if (config2["sequence1"] && config2["sequence1"].IsSequence()) {
// para fazer o swap não usar alias
auto tmp = config2["sequence1"][0].as<int>();
config2["sequence1"][0] = config2["sequence1"][2].as<int>();
config2["sequence1"][2] = tmp;
cout << "[2]: " << config2["sequence1"][2] << endl;
for (auto item : config2["sequence1"]) {
cout << "Sequence1 default: " << item << endl;
try {
cout << "Sequence1 string: " << item.as<string>() << endl;
cout << "Sequence1 int: " << item.as<int>() << endl;
} catch (YAML::BadConversion &e) {
cout << "exceção de conversão: " << e.what()
<< endl; // deve ser disparada quando tentar converter "string" em
// int
} catch (YAML::Exception &e) {
cout << "exceção genérica: " << e.what() << endl;
} catch (...) {
cout << "N exceção: falha de conversão" << endl;
}
}
}
if (config2["not-found-key"]) {
cout << "Key não encontrada foi encontrada!" << endl;
}
Possible output
sequence1 é uma sequência
key1 é um escalar
config é um mapa
key1: value1
key2: 2
key3: 3.14159
[2]: 30
Sequence1 default: 10
Sequence1 string: 10
Sequence1 int: 10
Sequence1 default: 20
Sequence1 string: 20
Sequence1 int: 20
Sequence1 default: 30
Sequence1 string: 30
Sequence1 int: 30
Sequence1 default: string
Sequence1 string: string
Sequence1 int: exceção de conversão: yaml-cpp: error at line 8, column 5: bad conversion
Sequence1 default: 50
Sequence1 string: 50
Sequence1 int: 50