开发学院软件开发VC 用STL快速编写ini配置文件识别类 阅读

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

 2010-07-15 20:45:34 来源:WEB开发网   
核心提示:设计需求:ini文件的格式一般如下:[section1]key1=value1key2=value2......[section2]key1=value1key2=value2#注释......实际的例子是:#ini for path[path]dictfile = /home/tmp/dict.datinputfil

设计需求:

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;
};

1 2  下一页

Tags:STL 快速 编写

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接