zoukankan      html  css  js  c++  java
  • Boost.PropertyTree读取ini文件(Linux环境)

        昨天因为需要读取配置文件略略伤神。网上很多例子但是我用都会报错,很多人把Boost.PropertyTree的函数写很麻烦的包所以报错我也不知道什么问题,所以今天整理下。

        头上附上官网链接:Boost C++库 因为别人的代码再用的顺手都是别人的思路,有不明白还是官网最好理解

    然后分享和分析下我的代码:

      #include <boost/property_tree/ptree.hpp>  
    #include <boost/property_tree/ini_parser.hpp>
    //定义初始化
    boost::property_tree::ptree m_pt, tag_setting; read_ini(
    "/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt); tag_setting = m_pt.get_child(tagname); int x = tag_setting.get<int>("pos_x",20); int y = tag_setting.get<int>("pos_y",20); std::cout << x << y<<std::endl;

        首先,boost::property_tree::ptree m_pt, tag_setting;创建对象,这句话放在初始化声明里。

        然后,read_ini("/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt);读取你要读取的路径和文件名,m_pt是将要读取这个文件的对象。看到别人博客里面有给read_ini前面加包名这样写的boost::property_tree::ini_parser::read_ini(ini_file, m_pt);我开始直接粘过去编译一直通不过,后来去掉就可以了不知为何。

        这句,tag_setting = m_pt.get_child(tagname);因为ini文件是分很多section的,tagname就是【】中的名字,告诉系统是读取这一块。注意,tag_setting这时候读到的是ini的一块内容。

        接着,int x  = tag_setting.get<int>("pos_x",20);
                  int y  = tag_setting.get<int>("pos_y",20);这两句就是读取tagname块中的具体值啦,参数pos_x是ini文件的变量名,后面的20是如果在配置文件中没有找到这个变量则默认20这个值。

        最后,读取就可以啦std::cout <<  x  <<  y<<std::endl;

    根据官网的意思,似乎读xml和Json也是一样的,但是函数和头文件名里的ini就好相应的改变啦。

    对了,最后附上我的ini:

    [e2004000780c002212709894]
    pos_x = 30
    pos_y = 40
    
    [e2004000780c00221450823d]
    pos_x = 50
    pos_y = 20
    
    [aaaabbbb3333444412410000]
    pos_x = 01
    pos_y = 90
    

     /*------------------------------------------------------------------------可爱的分割线---------------------------------------------------------------------------*/

    刚刚加了写入功能代码+讲解:

    tag_setting.clear(); //不清除的话新的标签默认会继承上一个标签中的内容
    tag_setting.put<int>("pos_x",666); m_pt.put_child(tagname,tag_setting); //写入新的标签,如果标签名一样,会修改你前一个的内容,如果不一样就会在下面新加一个 write_ini("/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt);

    第一句tag_setting.put<int>("pos_x",666);改变pos_x变量的值。

    后一句,如果名字跟前面的一样,会改变前面的值,否则会新生成一个。

    下面两个不解释了,试了下add_child,有问题。

    另附链接:boost函数库

  • 相关阅读:
    第七、八章学习笔记
    sort
    团队作业
    Linux C语言编程
    myod
    第十章学习笔记
    团队作业二—《需求分析》
    学习笔记4
    学习笔记1
    学习笔记2
  • 原文地址:https://www.cnblogs.com/feixiao5566/p/4647341.html
Copyright © 2011-2022 走看看