C++ Boost PropertyTree解析INI文件詳解
前言
PropertyTree是一個(gè)非常牛叉的東西!雖然很小,但是,相當(dāng)需要,相當(dāng)重要!因?yàn)椋芏嗟臇|西,我們不需要去開(kāi)發(fā),只需要去用就好了,這個(gè)東西的開(kāi)發(fā)正的是極好極好的!
更重要的是,它來(lái)自大名鼎鼎的Boost庫(kù),這個(gè)庫(kù)的重要性,已經(jīng)是不言而喻了!
property_tree是一個(gè)保存了多個(gè)屬性的樹(shù)形數(shù)據(jù)結(jié)構(gòu)!
可以使用類似訪問(wèn)路徑的方式問(wèn)任意節(jié)點(diǎn)的屬性,而且每個(gè)節(jié)點(diǎn)都可以用類似STL的風(fēng)格遍歷子節(jié)點(diǎn)。
property_tree適合于應(yīng)用程序的配置數(shù)據(jù)處理,可以解析xml、ini、json和info四種格式的文本數(shù)據(jù)據(jù)
它簡(jiǎn)直,就是最好的讀取配置文件庫(kù)!
什么是property_tree?
屬性樹(shù)庫(kù)提供了一種數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)了任意深度嵌套的值樹(shù),并通過(guò)一些鍵在每個(gè)級(jí)別上建立索引。樹(shù)的每個(gè)節(jié)點(diǎn)都存儲(chǔ)它自己的值,以及它的子節(jié)點(diǎn)和它們的鍵的有序列表。樹(shù)允許通過(guò)路徑方便地訪問(wèn)任何節(jié)點(diǎn),這是多個(gè)鍵的的存儲(chǔ)
此外,該庫(kù)為許多數(shù)據(jù)格式提供了解析器和生成器,這些數(shù)據(jù)格式可以由這樣的樹(shù)表示,包括XML、INI和JSON
屬性樹(shù)是通用的數(shù)據(jù)結(jié)構(gòu),但特別適合保存配置數(shù)據(jù)。樹(shù)提供了自己的樹(shù)特有的接口,并且每個(gè)節(jié)點(diǎn)也是其子節(jié)點(diǎn)的stl兼容序列?!菊f(shuō)白了,這就是一個(gè)自我嵌套的數(shù)據(jù)結(jié)構(gòu)】
在概念上,節(jié)點(diǎn)可以被認(rèn)為是以下結(jié)構(gòu):
struct ptree
{
data_type data;// data associated with the node
list< pair<key_type, ptree>> children;// ordered list of named children
};可以看到,這個(gè)就是一個(gè)自我嵌套的一個(gè)數(shù)據(jù)結(jié)構(gòu)!

key_type和data_type在某種程度上都是可配置的,但是通常是std::string或std::wstring,而解析器只處理這種樹(shù)。
許多軟件項(xiàng)目在其生命周期的某一時(shí)刻開(kāi)發(fā)了類似的工具,而屬性樹(shù)也以相同的方式產(chǎn)生。我們希望lib能拯救許多人,讓他們不要重新發(fā)明輪子。
實(shí)現(xiàn)代碼
#include <iostream>
#include <string>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
using namespace std;
using namespace boost;
// 寫(xiě)入文件
void init_ini(const std::string &filename)
{
using boost::property_tree::ptree;
ptree pt;
// 增加新的鍵值對(duì)
pt.add("config.address", "192.168.1.1");
pt.add("config.port", 22);
// 修改原有鍵值對(duì)
pt.put("config.port", 3389);
write_ini(filename, pt);
}
int main(int argc, char *argv[])
{
std::string f("c://config.ini");
init_ini(f);
// 讀取ini文件
boost::property_tree::ptree ptr, tag;
boost::property_tree::ini_parser::read_ini("c://config.ini", ptr);
tag = ptr.get_child("config");
std::string address = tag.get<std::string>("address");
int port = tag.get<int>("port");
std::cout << "地址: " << address << " 端口: " << port << std::endl;
std::system("pause");
return 0;
}
到此這篇關(guān)于C++ Boost PropertyTree解析INI文件詳解的文章就介紹到這了,更多相關(guān)C++ Boost PropertyTree解析INI文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
探討:程序在內(nèi)存中的分配(常量,局部變量,全局變量,程序代碼)問(wèn)題
本篇文章是對(duì)程序在的內(nèi)存中分配(常量,局部變量,全局變量,程序代碼)的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C/C++中for語(yǔ)句循環(huán)用法以及練習(xí)舉例
for語(yǔ)句是一種循環(huán)語(yǔ)句,它是對(duì)while語(yǔ)句的推廣,下面這篇文章主要給大家介紹了關(guān)于C/C++中for語(yǔ)句循環(huán)用法以及練習(xí)舉例的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
wxWidgets實(shí)現(xiàn)無(wú)標(biāo)題欄窗口拖動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了wxWidgets實(shí)現(xiàn)無(wú)標(biāo)題欄窗口拖動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
C語(yǔ)言詳解數(shù)據(jù)結(jié)構(gòu)與算法中枚舉和模擬及排序
枚舉和模擬其實(shí)是沒(méi)什么算法可言的,大多數(shù)都是按照題目意思去寫(xiě),這里提供快排和歸并的兩個(gè)模板,感興趣的朋友來(lái)看看吧2022-04-04
使用C++中的ADO對(duì)SQLite進(jìn)行增刪改查
本文將介紹如何使用C++的ADO (ActiveX Data Objects)對(duì)SQLite數(shù)據(jù)庫(kù)進(jìn)行增刪改查操作,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-06-06

