这是一个类,直接调用就可以了。
H
- class common_tool
- {
- public:
- common_tool(void);
- ~common_tool(void);
- std::string read_config(const char* filename,const char* parent_start,const char* parent_end,const char* child_start,const char* child_end);
- /*
- 判断在一个字符串里面是否存在查找的字符串
- key 查找字符串
- */
- const bool exist_parent_key(const char* source,const char* key);
- /*
- 得到2个字符串中间的值
- */
- std::string get_value_between(const char* source,const char* keyname_start,const char* keyname_end);
- };
CPP
- #include <iostream>
- #include <fstream>
- #include <string>
- #include "common_tool.h"
- using namespace std;
- common_tool::common_tool(void)
- {
- }
- common_tool::~common_tool(void)
- {
- }
- std::string common_tool::read_config(const char* filename,const char* child_end)
- {
- string strEmptyString="";
- ifstream file(filename,ios::in);
- if (!file.is_open())
- {
- return strEmptyString;
- }
- string line_string="";
- string document_txt="";
- int pos=-1;
- string keyname_parent_start = parent_start;
- string keyname_parent_end =parent_end;
- string keyname_child_start = child_start;
- string keyname_child_end = child_end;
- string keyvalue = "";
- bool find_parent_start =false;
- bool find_parent_end =false;
- bool find_parent =false;
- while(getline(file,line_string))
- {
- //find start of parent keyname
- if(false == find_parent)
- {
- find_parent_start = exist_parent_key(line_string.c_str(),keyname_parent_start.c_str());
- if(true == find_parent_start)
- {
- find_parent = true;
- }
- }
- // find end of parent keyname
- find_parent_end = exist_parent_key(line_string.c_str(),keyname_parent_end.c_str());
- if(true == find_parent_end)
- {
- find_parent = false;
- break;
- }
- //find keyvalue by keyname what you want in parent keyname.
- if(true == find_parent)
- {
- keyvalue="";
- keyvalue.append(get_value_between(line_string.c_str(),keyname_child_start.c_str(),keyname_child_end.c_str()));
- if(keyvalue.length()>0)
- {
- break;
- }
- }
- }
- file.close();
- return keyvalue;
- }
- const bool common_tool::exist_parent_key(const char* source,const char* key)
- {
- bool rs = false;
- string keyname = key;
- string line = source;
- int pos = 0;
- pos=line.find(key,0);
- if(pos<0)
- {
- rs = false;
- }
- else
- {
- rs = true;
- }
- return rs;
- }
- std::string common_tool::get_value_between(const char* source,const char* keyname_end)
- {
- bool rs = false;
- string str_source = source;
- string keyvalue = "";
- static const char* str_empty_value = "";
- int pos_start = 0;
- int pos_end = 0;
- int len = 0;
- len = str_source.length();
- if(len<=0)
- {
- return str_empty_value;
- }
- pos_start = str_source.find(keyname_start,0);
- pos_end = str_source.find(keyname_end,0);
- if(pos_start<0 || pos_end <0)
- {
- return str_empty_value; // can not find!
- }
- int pos_keyvalue_start = pos_start + strlen(keyname_start);
- int len_keyvalue = pos_end - pos_keyvalue_start;//len - pos_keyvalue_start - strlen(keyname_end);
- if(len_keyvalue<=0)
- {
- return str_empty_value;
- }
- keyvalue = str_source.substr(pos_keyvalue_start,len_keyvalue);
- return keyvalue;
- }
完。