用STL快速编写ini配置文件识别类

设计需求:

ini文件的格式一般如下:

[section1]
key1=value1
key2=value2
......

[section2]
key1=value1
key2=value2  #注释
......

实际的例子是:

#ini for path
[path]
dictfile = /home/tmp/dict.dat
inputfile= /home/tmp/input.txt
outputfile= /home/tmp/output.txt

#ini for exe
[exe]
user= winter    //user name
passwd= 1234567  #pass word
database= mydatabase

其中有五种元素:section 名,Key名,value值,注释 #或者//开头,标志字符"[" "]" "="。查找项的对应关系为sectiong-key和value对应。需要得到是value。class IniFile要实现的是两个函数:读入ini文件,读取sect-key对应的value值。即实现下面的接口:

class IniFile{
public:
  IniFile();
  //打开ini文件
  bool open(const char* pinipath);
  //读取value值
  const char* read(const char* psect, const char*pkey);
 };

设计实现:

用ifstream按行读入ini文件的内容

识别每一行的字符串,分析出sectiong,key,value,和注释。

用map<string, string, less<string> >来记录所有的sectiong-key和value。

重新定义class IniFile

typedef map<string, string, less<string> > strMap;
typedef strMap::iterator strMapIt;

const char*const MIDDLESTRING = "_____***_______";
class IniFile
{
public:
  IniFile( ){};
  ~IniFile( ){};
  bool open(const char* pinipath)
  {
    return do_open(pinipath);
  }
  string read(const char*psect, const char*pkey)
  {
    string mapkey = psect;
    mapkey += MIDDLESTRING;
    mapkey += pkey;
    strMapIt it = c_inimap.find(mapkey);
    if(it == c_inimap.end())
      return "";
    else
      return it->second;
  }
protected:
  bool do_open(const char* pinipath)
  {
    ifstream fin(pinipath);
    if(!fin.is_open())
      return false;
    vector<string> strvect;
    while(!fin.eof())
    {
      string inbuf;
      getline(fin, inbuf,'\n');
      strvect.push_back(inbuf);
    }
    if(strvect.empty())
      return false;
    for_each(strvect.begin(), strvect.end(), analyzeini(c_inimap));
    return !c_inimap.empty();
  }
  strMap c_inimap;
};

时间: 2024-08-03 09:35:21

用STL快速编写ini配置文件识别类的相关文章

PHP.INI配置文件漫游(2)

文章第一部分已经带领你领略了php.ini文件的结构,并且说明了如何修改PHP查找路径.差错处理,以及解析器的相关选项.第二部分将深入配置文件,内容包括如何激活PHP扩展选项.针对PHP脚本设置资源限制,以及通过PHP脚本动态改变配置变量. 激活扩展选项 PHP可以使用很多不同的扩展选项.在UNIX系统中,扩展选项需要在编译时创建:而对于Windows,二进制DLL文件将随PHP发布而将自己包括进去.变量extension_dir包括了PHP应当查看相关扩展选项的目录名. extension_d

PHP学习研究:PHP.INI配置文件漫游

一般来说你不需要改变PHP设置,它根据默认的配置通常就能很好的工作.但作为PHP设计者的开发人员们考虑到用户可能偶尔需要针对特定应用程序对PHP语言的一些功能进行调整.因此,他们将一些PHP变量通过名为php.ini的配置文件显示出来.此配置文件允许用户调整PHP多项功能,包括设置文件路径以及目录.改变会话以及数据库参数,以及激活扩展选项(activating extensions)等. 在开始我们的介绍之前,我们将对PHP配置文件的组织方式进行简要的说明.文件命名为php.ini的原因之一就是

用java读写ini配置文件

??? 在java中,配置文件一般主要是两种形式:xml文件或者property文件.但大部分人都习惯使用ini文件,而且ini文件的分节以及注释功能,比起xml,也是易懂易用的. ??? 在vc中类库中有读写ini文件的标准函数.在dephi或其他语言中,也可以用windows的api函数来读写ini文件.但在java中似乎没有现成的类和方法可供使用.虽然java可以通过加载dll文件的方法来调用windows的api,但总觉得不够正宗. ??? 于是自己写了个读写ini配置文件的类,供大家参

用ASP读INI配置文件的函数

选择自 mind_1220 的 Blog 要求:  能够读取按照  INI文件的Section和Key来读出相应的Value.  比如一个配置文件    SMSVote.ini  ---------------------------------  [SMSVote]  Server=(local)  DB=SMSVote  User=sa  PassWord=123  [DB2Vote]  Server=192.168.0.1  DB=DB2  User=sa  PassWord=  ----

python读写ini配置文件方法实例分析

  本文实例讲述了python读写ini配置文件方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import ConfigParser import os class ReadWriteConfFile: currentDir=os.path.dirname(__file__) fil

asp.net程序来读取多语言版本Ini配置文件

这是asp.net程序来读取多语言版本Ini配置文件的开发示例,主要分为以下三个部分: 1. Ini 配置文件 2. 读取Ini配置文件的DLL 3. Web页面调用与内容显示 4. 数据库表T_User,如右图 首先说明一下Ini 文件格式:如下图其中[M_Index]节点和该节点下的所有的key和value,其中[M_Index]节点的名称是对应开发示例中的每个页面所在的文件夹名称的第一个字母加下划线再加该页面的名称组合而成,如 M_Index 则表示Manager文件夹下面有一个Index

C++读写INI配置文件的类实例_C 语言

本文实例讲述了C++读写INI配置文件的类.分享给大家供大家参考.具体如下: 1. IniReader.h文件: #ifndef INIREADER_H #define INIREADER_H #include <windows.h> class CIniReader { public: CIniReader(LPCTSTR szFileName); int ReadInteger(LPCTSTR szSection, LPCTSTR szKey, int iDefaultValue); fl

C++读取INI配置文件类实例详解_C 语言

本文以实例讲解了C++读取配置文件的方法. 一般情况下,我们都喜欢使用ini扩展名的文件作为配置文件,可以读取及修改变量数值,也可以设置新的组,新的变量,本文的实例代码一个是读取INI的定义文件,另一个是CIniFile类实现文件,两者结合,完美实现VC++对INI文件的读写. 用户接口说明:在成员函数SetVarStr和SetVarInt函数中,当iType等于零,则如果用户制定的参数在ini文件中不存在,则就写入新的变量.当iType不等于零,则如果用户制定的参数在ini文件中不存在,就不写

exception-内存问题,ini配置文件也改了,什么方法都试了还是不行,求解决

问题描述 内存问题,ini配置文件也改了,什么方法都试了还是不行,求解决 Unhandled event loop exception GC overhead limit exceeded 解决方案 是java哦,在eclipse中,有没有在线的,很急