C++讀寫(xiě)(CSV,Yaml,二進(jìn)制)文件的方法詳解_第1頁(yè)
C++讀寫(xiě)(CSV,Yaml,二進(jìn)制)文件的方法詳解_第2頁(yè)
C++讀寫(xiě)(CSV,Yaml,二進(jìn)制)文件的方法詳解_第3頁(yè)
C++讀寫(xiě)(CSV,Yaml,二進(jìn)制)文件的方法詳解_第4頁(yè)
C++讀寫(xiě)(CSV,Yaml,二進(jìn)制)文件的方法詳解_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第C++讀寫(xiě)(CSV,Yaml,二進(jìn)制)文件的方法詳解它的基本語(yǔ)法規(guī)則如下:

大小寫(xiě)敏感使用縮進(jìn)表示層級(jí)關(guān)系縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格??s進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可

YAML支持的數(shù)據(jù)結(jié)構(gòu)有三種。

對(duì)象:鍵值對(duì)的集合,又稱為映射(mapping)/哈希(hashes)/字典(dictionary)數(shù)組:一組按次序排列的值,又稱為序列(sequence)/列表(list)純量(scalars):?jiǎn)蝹€(gè)的、不可再分的值

一般常用yaml-cpp和OpenCV進(jìn)行解析

相比yaml-cpp,OpenCV的優(yōu)點(diǎn)是可以在YAML文件中存儲(chǔ)矩陣,讀出來(lái)就是cv::Mat格式;缺點(diǎn)是OpenCV要求YAML文件有一個(gè)特殊的頭,與標(biāo)準(zhǔn)的YAML文件并不兼容?;蛘咭部梢岳斫鉃镺penCV定義了一種新的YAML格式。

3.1安裝yaml-cpp

/jbeder/yaml-cpp/

編譯環(huán)境

Windows10VS2025cmake-3.19.8-win64-x64

yaml-cpp的編譯

將下載好的yaml-cpp-master.zip進(jìn)行解壓,在源碼目錄下創(chuàng)建一個(gè)build文件夾并進(jìn)入這個(gè)文件夾

mkdirbuild

cdbuild

cmake..

接著將會(huì)看到在build目錄下有一個(gè)名為YAM_-CPP.sln的文件,用VS打開(kāi)它

對(duì)ALL_BUILD生成解決方案,成功生成后,會(huì)在build/Debug目錄下得到y(tǒng)aml-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類(lèi)型作為下表,讀取參數(shù)

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值,報(bào)YAML::TypedB

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論