【C++】4.工具:读取yaml配置信息

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍读取yaml配置信息。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. yaml介绍
    • :blush:2. yaml-cpp库安装
    • :satisfied:3. yaml读取示例
      • 读取yaml
      • 读取string和vector

😏1. yaml介绍

YAML(YAML Ain’t Markup Language)是一种简单可读的数据序列化格式。它是一种简洁和易于理解的语言,用于表示数据结构和配置信息。YAML最初是为了在不同编程语言之间交换数据而设计的,但它也被广泛用于配置文件、日志文件以及其他需要结构化数据的地方。

YAML采用了一种基于缩进的语法来表示数据的层次结构。它使用空格缩进来表示层级关系,而不是像XML或JSON那样使用特殊的标记符号。这使得YAML文件在视觉上更具可读性,并且可以使用普通文本编辑器进行编辑。

YAML还支持一些高级特性,如引用、包含外部文件、多行字符串等。它的灵活性使得它成为许多应用程序中处理配置文件和数据交换的首选格式。

😊2. yaml-cpp库安装

Github仓库:https://github.com/jbeder/yaml-cpp

Tutorial:https://github.com/jbeder/yaml-cpp/wiki/Tutorial

安装编译:

git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build && cd build
cmake ..
make
make test
sudo make install

yaml-cpp 默认构建的就是静态库,也就是 unix 类系统下的 .a 文件。

😆3. yaml读取示例

读取yaml

尝试打开读取yaml示例如下:

// main.cpp
#include <yaml-cpp/yaml.h> //yaml-cpp 头文件
#include <iostream>int main(int argc, char** argv) {try {YAML::Node node = YAML::LoadFile("file.yml");std::cout << node << std::endl; //输出yaml数据} catch (...) { //文件为非yaml格式抛出异常std::cout << "error" << std::endl;}return 0;
}

读取string和vector

新建config.yaml配置文件:

custom_db:db_domain: 10.0.1.1db_username: rootdb_passwd: my_passwddb_schema: testredis:redis_domain: 10.0.1.2redis_passwd: 123456hello:num_config: [yaml-test]name_config: [powered, by, yaml-test]

读取代码示例:

// main.cpp
#include <iostream>
#include <string>
#include <stdio.h>
#include <unistd.h>
#include <vector>
#include <yaml-cpp/yaml.h>// read config
const std::string DB_CONF = "config.yaml";int main(int argc, char *argv[]) {/*----------------------------------- test yaml-cpp ----------------------------------------*/std::cout << "This code is for test yaml" << std::endl;/* Node conf. */YAML::Node conf = YAML::LoadFile(DB_CONF);/*----------------------------------- display db_config ----------------------------------------*/std::cout << "Database:"<< std::endl;std::cout << "domain:  " << conf["custom_db"]["db_domain"].as<std::string>() << std::endl;std::cout << "username:" << conf["custom_db"]["db_username"].as<std::string>() << std::endl;std::cout << "passwd:  " << conf["custom_db"]["db_passwd"].as<std::string>() << std::endl;std::cout << "schema:  " << conf["custom_db"]["db_schema"].as<std::string>() << std::endl;/*----------------------------------- display redis ----------------------------------------*/std::cout << "Redis" << std::endl;std::cout << "redis_domain: " << conf["redis"]["redis_domain"].as<std::string>() << std::endl;std::cout << "redis_passwd: " << conf["redis"]["redis_passwd"].as<std::string>() << std::endl;/*----------------------------------- display hello ----------------------------------------*//* vector of name string. */std::vector<std::string> name_vec = conf["hello"]["num_config"].as<std::vector<std::string> >();if(!name_vec.empty())std::cout << name_vec[0] << std::endl;std::vector<std::string> name_vec2 = conf["hello"]["name_config"].as<std::vector<std::string> >();if(!name_vec2.empty()){for (int i = 0; i < name_vec2.size(); i++){std::cout << name_vec2[i] << " ";}std::cout << std::endl;}return 0;
}

编译:g++ main.cpp -lyaml-cpp

结果如下:

This code is for test yaml
Database:
domain:  10.0.1.1
username:root
passwd:  my_passwd
schema:  test
Redis
redis_domain: 10.0.1.2
redis_passwd: 123456
yaml-test
powered by yaml-test

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8039.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CC1310 CC1310F128RSMR 超低功耗SUB-1GHz 无线 MCU芯片

1 器件概述 1 1 特性 • 微控制器 – 性能强大的 Arm Cortex -M3 处理器 – EEMBCCoreMark评分&#xff1a;142 – EEMBC ULPBench™评分&#xff1a;158 – 时钟速率最高可达 48MHz – 32KB、64KB 和 128KB 系统内可编程闪存 – 8KB 缓存静态随机存取存储器 (SRAM) &#xff…

CMake静态库动态库的构建和链接

cmake的基础知识&#xff1a;CMakeLists常用命令&#xff0c;在这里不再赘述。 Windows平台下可用cmake-gui生成vs的.sln工程&#xff0c;Linux平台下可以运行cmake命令。 动态库和静态库的构建 现有C工程目录结构如下&#xff1a; 静态库的构建 add.h #include <iost…

C语言进阶---字符串+内存函数

本章重点 重点介绍处理字符和字符串的库函数的使用和注意事项。 求字符串长度 strlen() 长度不受限制的的字符串函数 strcpy()strcat()strcmp() 长度受限制的的字符串函数 strncpy()strncat()strncmp() 字符串查找 strstr()strtok() 错误信息报告 strerror() 字符操作内存操作函…

FPGA实验二:模可变计数器设计

目录 一、实验目的 二、实验要求 三、实验代码 1.实验源码 2.部分代码设计思路分析 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 3、下载测试结果及分析 五、实验心得 1.解决实验中遇到的困难及解决 2.完成实验后的心得 一、实验目的 &#xff08;1&#xf…

Jenkins用户权限设置和运行节点配置实战

这里写目录标题 一、Jenkins用户权限设置实战1、用户权限配置2、用户权限分配 二、Jenkins运行节点配置实战1、增加运行节点的好处2、实战B-1:添加Jenkins运行节点实战1、相关字段说明&#xff1a;2、SSH连接方式 实战B-2:配置不同类型的节点-Python 节点实战B-3:配置不同类型的…

【Java|golang】2679. 矩阵中的和

给你一个下标从 0 开始的二维整数数组 nums 。一开始你的分数为 0 。你需要执行以下操作直到矩阵变为空&#xff1a; 矩阵中每一行选取最大的一个数&#xff0c;并删除它。如果一行中有多个最大的数&#xff0c;选择任意一个并删除。 在步骤 1 删除的所有数字中找到最大的一个…

什么是DevOps? 什么是DORA?

1. 前言 对于搞云原生应用的同学&#xff0c;对于DevOps和DORA应该都不陌生。但对于传统应用程序开发的同学&#xff0c;经常被DevOps, Microservice, CICD, DORA这些新颖的名词搞得晕头转向。那么到底什么是DevOps? 什么是DORA呢&#xff1f; 2. 解析 2.1 DevOps DevOps并…

Linux进程概念

目录 冯诺依曼体系结构 操作系统 系统调用和库函数概念 进程 描述进程-PCB 组织进程 理解进程 查看进程 通过系统调用获取进程标示符 通过系统调用创建进程-fork 进程状态 进程状态查看 孤儿进程 进程优先级 查看系统进程 PRI and NI PRI vs NI 用top命令更改…

官宣 | 平行云正式升级为Paraverse平行云科技,开启全球业务新征程

6月30日, "Here is New-Gen Web"——Paraverse Global Strategy and Brand Launch Party 于香港科学园召开&#xff0c;会上平行云正式宣布升级为Paraverse平行云科技&#xff08;以下简称Paraverse)&#xff0c;并升级品牌标识“Paraverse”。这一全新命名与视觉焕新…

LabVIEW仿真单频脉冲信号+线性调频信号+高斯白噪声信号

文章目录 前言一、单频脉冲信号1、信号参数2、仿真图①、前面板②、程序框图 二、线性调频信号1、信号参数2、仿真图①、前面板②、程序框图 三、高斯白噪声信号1、信号参数2、仿真图①、前面板②、程序框图 四、合成信号1、前面板2、程序框图 五、代码自取 前言 本文基于 Lab…

day28-JSP

0目录 JSP 1.为什么使用JSP 2.B/S和C/S的区别 3.URL 4.Tomcat 5.JSP实战综合项目 1.为什么使用JSP 1.1 JSP定义&#xff1a; &#xff08;1&#xff09;是一种动态网页技术 &#xff08;2&#xff09;Java Server Pages&#xff08;Java服务器端页面技术&#xff09; 1.2 …

干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建

以下内容整理自大数据能力提升项目必修课《大数据系统基础》同学们的期末答辩汇报。 我们的报告将分为六个部分&#xff0c;第一部分是研究背景与内容。受疫情影响以来&#xff0c;石化行业市场日趋饱和&#xff0c;竞争激烈&#xff0c;同时利润也受到压缩&#xff0c;大部分石…