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

key_type和data_type在某種程度上都是可配置的,但是通常是std::string或std::wstring,而解析器只處理這種樹。
許多軟件項目在其生命周期的某一時刻開發(fā)了類似的工具,而屬性樹也以相同的方式產(chǎn)生。我們希望lib能拯救許多人,讓他們不要重新發(fā)明輪子。
實現(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;
// 寫入文件
void init_ini(const std::string &filename)
{
using boost::property_tree::ptree;
ptree pt;
// 增加新的鍵值對
pt.add("config.address", "192.168.1.1");
pt.add("config.port", 22);
// 修改原有鍵值對
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用UART與PC通信實現(xiàn)msp430g2553單片機超聲波測距示例
這篇文章主要介紹了使用UART與PC通信實現(xiàn)msp430g2553單片機超聲波測距示例,需要的朋友可以參考下2014-05-05
C語言解3元1次方程組 用初中學(xué)的最基本的聯(lián)合消元法
最近就想自己能不能先寫個算線性方程組的程序呢?后來就想了這么個方法,暫時只能算3元的,任意元的接下來繼續(xù)想。有太多硬編碼,希望有興趣的讀者可以給點修改建議2013-11-11
C語言正則表達式詳解 regcomp() regexec() regfree()用法詳解
C語言處理正則表達式常用的函數(shù)有regcomp()、regexec()、regfree()和regerror(),這里就為大家介紹一下,需要的朋友可以參考一下啊2018-04-04
C++開發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化
這篇文章主要介紹了C++開發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化方法的相關(guān)資料,需要的朋友可以參考下2015-07-07

