C++读写(CSV,Yaml,二进制)文件的方法详解_第1页
C++读写(CSV,Yaml,二进制)文件的方法详解_第2页
C++读写(CSV,Yaml,二进制)文件的方法详解_第3页
C++读写(CSV,Yaml,二进制)文件的方法详解_第4页
C++读写(CSV,Yaml,二进制)文件的方法详解_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C++读写(CSV,Yaml,二进制)文件的方法详解它的基本语法规则如下:

大小写敏感使用缩进表示层级关系缩进时不允许使用Tab键,只允许使用空格。缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

YAML支持的数据结构有三种。

对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)数组:一组按次序排列的值,又称为序列(sequence)/列表(list)纯量(scalars):单个的、不可再分的值

一般常用yaml-cpp和OpenCV进行解析

相比yaml-cpp,OpenCV的优点是可以在YAML文件中存储矩阵,读出来就是cv::Mat格式;缺点是OpenCV要求YAML文件有一个特殊的头,与标准的YAML文件并不兼容。或者也可以理解为OpenCV定义了一种新的YAML格式。

3.1安装yaml-cpp

/jbeder/yaml-cpp/

编译环境

Windows10VS2025cmake-3.19.8-win64-x64

yaml-cpp的编译

将下载好的yaml-cpp-master.zip进行解压,在源码目录下创建一个build文件夹并进入这个文件夹

mkdirbuild

cdbuild

cmake..

接着将会看到在build目录下有一个名为YAM_-CPP.sln的文件,用VS打开它

对ALL_BUILD生成解决方案,成功生成后,会在build/Debug目录下得到yaml-cppd.lib文件

3.2yaml文件的解析(1)

1)config.yaml配置文件

custom_db:

db_domain:

db_username:root

db_passwd:my_passwd

db_schema:test

redis:

redis_domain:0

redis_passwd:123456

hello:

num_config:[1141studio]

name_config:[powered,by,1141studio]

2)config_test.cpp

#includeiostream

#includestring

#includestdio.h

#includeunistd.h

#include"yaml-cpp/yaml.h"

#includevector

conststd::stringDB_CONF="config.yaml";

intmain(intargc,char*argv[]){

/*-----------------------------------testyaml----------------------------------------*/

printf("helloworld\n");

std::cout"thiscodeisonlyfortestyaml"std::endl;

/*Nodeconf.*/

YAML::Nodeconf=YAML::LoadFile(DB_CONF);

/*-----------------------------------displaydb_config----------------------------------------*/

std::cout"Database:"std::endl;

std::cout"domain:"conf["custom_db"]["db_domain"].asstd::string()std::endl;

std::cout"username:"conf["custom_db"]["db_username"].asstd::string()std::endl;

std::cout"passwd:"conf["custom_db"]["db_passwd"].asstd::string()std::endl;

std::cout"schema:"conf["custom_db"]["db_schema"].asstd::string()std::endl;

/*-----------------------------------displayredis----------------------------------------*/

std::cout"Redis"std::endl;

std::cout"redis_domain:"conf["redis"]["redis_domain"].asstd::string()std::endl;

std::cout"redis_passwd:"conf["redis"]["redis_passwd"].asstd::string()std::endl;

/*-----------------------------------displayhello----------------------------------------*/

std::cout"HelloServer"std::endl;

/*vectorofnamestring.*/

std::vectorstd::stringname_vec=conf["hello"]["num_config"].asstd::vectorstd::string

if(!name_vec.empty())

std::coutname_vec[0]std::endl;

return0;

3)CmakeLists.txt配置情况如下

cmake_minimum_required(VERSION3.5.1)

project(nanodet-mnn)

SET(CMAKE_BUILD_TYPE"Release")

SET(CMAKE_CXX_FLAGS_RELEASE"$ENV{CXXFLAGS}-O3-Wall")

set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}-std=c++11-Wall")

set(EXECUTABLE_OUTPUT_PATH${PROJECT_SOURCE_DIR}/)

#yaml-cpp的包含目录

include_directories("/gzy_mnt/YAML_X86/include")

file(GLOBSOURCE_FILES*.cpp)

add_executable(${CMAKE_PROJECT_NAME}${SOURCE_FILES})

target_link_libraries(

${CMAKE_PROJECT_NAME}

pthread

/gzy_mnt/YAML_X86/lib/libyaml-cpp.so

3.3yaml文件的解析(2)

config.yaml配置文件

name:frank

sex:male

age:18

skills:

c++:1

java:1

android:1

python:1

config_demo.cpp

#includeiostream

#include"yaml-cpp/yaml.h"

#includefstream

usingnamespacestd;

intmain(intargc,char**argv)

YAML::Nodeconfig;

try{

config=YAML::LoadFile("../config.yaml");

}catch(YAML::BadFilee){

std::cout"readerror!"std::endl;

return-1;

cout"Nodetype"config.Type()endl;

cout"skillstype"config["skills"].Type()endl;

//可以用string类型作为下表,读取参数

stringage="age";

cout"agewhenstringislabel:"config[age].asint()endl;

cout"name:"config["name"].asstring()endl;

cout"sex:"config["sex"].asstring()endl;

cout"age:"config["age"].asint()endl;

//读取不存在的node值,报YAML::TypedB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论