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

news/2024/11/23 3:25:00/

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍读取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.ppmy.cn/news/731434.html

相关文章

excel find 字符串批量查找

excel find 字符串批量查找 查找字符&#xff1a;15001001&#xff08;位置A1&#xff09; 内容&#xff1a;https://editor.csdn.net/md/?id15001001&#xff08;位置B1&#xff09; 查找公式&#xff1a;FIND(A1,B1,1)

xlsx如何查找替换_Excel如何批量查找和替换?

每当提到Excel查找和替换&#xff0c;大家首先想到的就是CtrlF&#xff0c;CtrlH 这对小情侣。 大家真正了解这对情侣吗&#xff1f; 大家在平常使用过程中&#xff0c;有点击过【选项】按钮吗&#xff1f; 1.工作簿中查找”雷哥“ 方法如下 Step1&#xff1a;按【CtrlF】&…

wps excel查找不定位_【WPS神技能】如何在WPSExcel表格中批量查找两列数据的不同?...

当我们需要在Excel表格中快速查找两列数据的不同时&#xff0c;如下图所示&#xff1a;如何快速找出“一月业绩”和“二月业绩”的不同。 在office-Excel表格中&#xff0c;我们可以通过“Ctrl\”一键搞定。详情见推文&#xff1a;【Excel神技能】如何在Excel表格中一键核对两列…

利用EXCEL批量重命名文件

今天遇到了需要重命名多个文件的情况&#xff0c;在网上查找后发现两种方法还比较有效&#xff0c;在此做下记录。 1.软件 利用现有的软件进行批量处理&#xff0c;这里使用的软件是 advancedrenamer 官网下载地址&#xff0c;使用起来很方便&#xff0c; 打开软件后的左侧区…

利用Excel批量修改图片名称

特征&#xff1a;图片目标名称需借助Matlab生成。 目标公式&#xff1a;”REN “&A1&” “&B1&”"。 注意事项&#xff1a; 图片名称不能有空格。 步骤如下&#xff1a; &#xff08;1&#xff09;A1生成&#xff1a; CtrlA 选中图片&#xff0c;Shift右键…

在Excel实现多关键字批量搜索、批量替换,以及批量添加批注

Excel一次只能搜索一个关键字&#xff0c;本教材将向您演示多关键字搜索与替换的办法。 具体步骤请看以下视频&#xff1a; 多关键字批量搜索、批量替换

Excel管理批量文件

该方法可以更好、更快、更便捷管理文献及查找文献&#xff0c;相当于一个小型文献管理器。此处以少量文件为例&#xff0c;批量文件通用操作。 第一步&#xff1a;确保需要管理的文件在一个文件夹 第二步&#xff1a;新建两个txt文件类型 其一命名为“print.txt”&#xff0c…

Excel批量下载

思路&#xff1a;把要下载的文件放到exportExcel目录下&#xff0c;利用url查找是否有改文件&#xff0c;有的话下载&#xff0c;没有的话报错。 import io.swagger.annotations.ApiOperation; import org.apache.commons.io.IOUtils; import org.springframework.stereotype.C…