本文只看粗体即可,太多catch语句。两个例子均来自libconfig包的example文件夹下面,.

例子一:

#include <iostream>

#include <iomanip>

#include <cstdlib>

#include <libconfig.h++>

using namespace std;

using namespace libconfig;

// This example reads the configuration file 'example.cfg' and display some of its contents.



int main(int argc, char **argv)

{

  Config cfg;

try

  {

    cfg.readFile("example.cfg"); //读配置文件

  }

  catch(const FileIOException &fioex)

  {

    std::cerr << "I/O error while reading file." << std::endl;

    return(EXIT_FAILURE);

  }

  catch(const ParseException &pex)

  {

    std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine()

              << " - " << pex.getError() << std::endl;

    return(EXIT_FAILURE);

  }

// Get the store name.

  try

  {

    string name = cfg.lookup("name"); // 查询某个路径“name”,得到setting,存储到name

    cout << "Store name: " << name << endl << endl;

  }

  catch(const SettingNotFoundException &nfex)

  {

    cerr << "No 'name' setting in configuration file." << endl;

  }



  const Setting& root = cfg.getRoot();//得到根setting

 // Output a list of all books in the inventory.

  try

  {

    const Setting &books = root["inventory"]["books"];

    int count = books.getLength();   //得到某个setting的长度,从而循环读取


       for(int i = 0; i < count; ++i)

    {

      const Setting &book = books[i];

      // Only output the record if all of the expected fields are present.

      string title, author;

      double price;

      int qty;

      if(!(book.lookupValue("title", title)  //查询名字为title的setting存储到title中

           && book.lookupValue("author", author)

           && book.lookupValue("price", price)

           && book.lookupValue("qty", qty)))

        continue;


      cout << setw(30) << left << title << "  "

           << setw(30) << left << author << "  "

           << '$' << setw(6) << right << price << "  "

           << qty

           << endl;

    }

    cout << endl;

  }

  catch(const SettingNotFoundException &nfex)

  {

    // Ignore.

  }

  return(EXIT_SUCCESS);

}





// eof

例子二

头文件省略

// This example reads the configuration file 'example.cfg', adds a new

// movie record to the movies list, and writes the updated configuration to

// 'updated.cfg'.

int main(int argc, char **argv)

{

  static const char *output_file = "updated.cfg";



  Config cfg;

  // Read the file. If there is an error, report it and exit.

  try

  {

    cfg.readFile("example.cfg"); //读配置文件

  }

  catch(const FileIOException &fioex)

  {

    std::cerr << "I/O error while reading file." << std::endl;

    return(EXIT_FAILURE);

  }

  catch(const ParseException &pex)

  {

    std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine()

              << " - " << pex.getError() << std::endl;

    return(EXIT_FAILURE);

  }

// Get the store name.

  try

  {

    string name = cfg.lookup("name");    //通过"name"这个路径查找 到某个setting(名字为 name) 存储到string name 中

    cout << "Store name: " << name << endl << endl;

  }

  catch(const SettingNotFoundException &nfex)

  {

    cerr << "No 'name' setting in configuration file." << endl;

  }





  // Find the 'movies' setting. Add intermediate settings if they don't yet

  // exist.

  Setting &root = cfg.getRoot(); //返回root setting

  if(! root.exists("inventory"))

    root.add("inventory", Setting::TypeGroup);

  Setting &inventory = root["inventory"];

  if(! inventory.exists("movies"))

    inventory.add("movies", Setting::TypeList);

  Setting &movies = inventory["movies"];

// Create the new movie entry.

  Setting &movie = movies.add(Setting::TypeGroup); //增加一个Setting::TypeGroup类型的子setting

  movie.add("title", Setting::TypeString) = "Buckaroo Banzai"; //增加一个子setting

  movie.add("media", Setting::TypeString) = "DVD";

  movie.add("price", Setting::TypeFloat) = 12.99;

  movie.add("qty", Setting::TypeInt) = 20;



  // Write out the updated configuration.

  try

  {

    cfg.writeFile(output_file); //把配置写到一个文件中

    cerr << "Updated configuration successfully written to: " << output_file

         << endl;

  }

  catch(const FileIOException &fioex)

  {

    cerr << "I/O error while writing file: " << output_file << endl;

    return(EXIT_FAILURE);

  }

  return(EXIT_SUCCESS);

}



// eof

配置文件:

example.cfg:

// An example configuration file that stores information about a store.



// Basic store information:

name = "Books, Movies & More";





// Store inventory:

inventory =

{

  books = ( { title  = "Treasure Island";

              author = "Robert Louis Stevenson";

              price  = 29.99;

              qty    = 5; },

            { title  = "Snow Crash";

              author = "Neal Stephenson";

              price  = 9.99;

              qty    = 8; }

          );





  movies = ( { title = "Brazil";

               media = "DVD";

               price = 19.99;

               qty = 11; },

             { title = "The City of Lost Children";

               media = "DVD";

               price = 18.99;

               qty = 5; },

             { title = "Memento";

               media = "Blu-Ray";

               price = 24.99;

               qty = 20;

             },

             { title = "Howard the Duck"; }

           );

};





// Store hours:

hours =

{

  mon = { open =  9; close = 18; };

  tue = { open =  9; close = 18; };

  wed = { open =  9; close = 18; };

  thu = { open =  9; close = 18; };

  fri = { open =  9; close = 20; };

  sat = { open =  9; close = 20; };

  sun = { open = 11; close = 16; };

};

libconfig第二篇----两个小例子的更多相关文章

  1. vuex2.0+两个小例子

    首先vuex概念比较多,一定要搞懂里面的概念,可以参考官网Vuex2.0概念,我写此文的目的是希望能对前端爱好者提供个参考,加深对vuex2.0各核心概念的理解. 废话少说,直接上干货.这是官网上的一 ...

  2. Vuex2.0边学边记+两个小例子

    最近在研究Vuex2.0,搞了好几天终于有点头绪了. 首先vuex概念比较多,一定要搞懂里面的概念,可以参考官网Vuex2.0概念,我写此文的目的是希望能对前端爱好者提供个参考,加深对vuex2.0各 ...

  3. 学习HttpClient,从两个小例子开始

    前言 HTTP(Hyper-Text Transfer Protocol,超文本传输协议)在如今的互联网也许是最重要的协议,我们每天做的很多事情都与之有关,比如,网上购物.刷博客.看新闻等.偶尔你的上 ...

  4. 两个小例子彻底明白python decorator

    一:没有什么实际意思,就是单纯的理解decorator.使用装饰器完全可以阻止方法中的代码执行. class json_test(object): def __init__(self, *arg, * ...

  5. 关于Finereport移动端报表二次开发的两个小例子

    例1:刷新页面 1. 问题描述 A超链至B填报,B提交数据后返回A时,A自动刷新显示新的数据. 2. 解决方案 1. contentPane.setAppearRefresh();  //在A的加载结 ...

  6. Vue.js的小例子--随便写的

    1.领导安排明天给同事们科普下vue 2.简单写了两个小例子 3.话不多说直接上代码 <!DOCTYPE html> <html> <head> <meta ...

  7. python2.7练习小例子(二十九)

        29):1.题目:按相反的顺序输出列表的值. #!/usr/bin/python # -*- coding: UTF-8 -*- a = ['one', 'two', 'three'] for ...

  8. python2.7练习小例子(二十四)

        24):1.题目:利用递归方法求5!.     程序分析:递归公式:fn=fn_1*4! #!/usr/bin/python # -*- coding: UTF-8 -*- def fact( ...

  9. 小白两篇博客熟练操作MySQL 之 第二篇

    小白两篇博客熟练操作MySQL  之   第二篇 一. 视图 视图是一个虚拟表,其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集, 并可以将其当做表来使用. s ...

随机推荐

  1. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...

  2. NumPy基础:数组和矢量计算

    今天被老板fire了,还是继续抄书吧,安抚我受伤的小心脏.知识还是得慢慢积累,一步一个脚印,这样或许才是最快的捷径. ------2015-2-16-------------------------- ...

  3. VHD进阶:差分VHD备份系统

    VHD进阶:差分VHD备份系统 一.创建虚拟磁盘 方法1:图形界面创建 1.打开磁盘管理器(运行diskmgmt.msc),在“磁盘管理”上点击右键,“创建VHD”,类型选择VHD,动态扩展或者固定大 ...

  4. 在win7 64bit系统安装QC软件

    当本机系统不再QC软件支持的系统上,可以在setup右键选择兼容性选择能支持安装的系统, 在JBOSS页面,选择该服务器,用户名输入本机的用户名和密码,如果没有配置域输入计算机名. 如果没有装IIS, ...

  5. angular.js之路由的选择

    在一个单页面中,我们可以添加多个模块,使得网页只在需要的时候加载这个模块.模块的切换大致上可以代替网页的切换,于是,我们便可以通过模块的切换实现网页的切换,这个切换是按需加载的. 乍一看非常普通的东西 ...

  6. gulp相关知识(2)

    将之前的东西的理论部分整理了一下—— gulp 前端构建工具 它可以帮助我们完成一些自动化操作 它需要一些插件的支持 var gulp = require('gulp'); --> gulp命令 ...

  7. C#,js数据排序及其操作

    List<int> listint=new List<int>{2,1,7,3,8,5,4,6};listint.Sort((x, y) => x - y); var a ...

  8. HDU1969:Pie(二分)

    Pie Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissio ...

  9. linux proxy

    ALL_PROXY=socks://192.168.2.1:3128/ HTTPS_PROXY=https://192.168.2.1:3128/HTTP_PROXY=http://192.168.2 ...

  10. POJ 3624 Charm Bracelet 简单01背包

    题目大意:有n件珠宝,每个珠宝的魅力值为v,重量为w,求在重量不超过m的情况下能达到的最大魅力值. 题目思路:简单的01背包,由于二维数组会超内存所以应该压缩成一维数组. dp[i][j],表示选取i ...