`
tulunta
  • 浏览: 379006 次
文章分类
社区版块
存档分类
最新评论

C++ STL string 格式化方法以及读取配置文件的实现

 
阅读更多

#ifndef _READCONFIG_H_
#define _READCONFIG_H_

#include <string>
#include <map>
#include <vector>
#include <iostram>
#include <fstream>

#define MAX_BUFFLEN 1024

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

const char * const MIDDLESTRING = "__**__";

using namespace std;

// 此类用于格式化string字符串
class SString : public string
{
public:

SString &Format(const char *_format, ...)
{
char szBuffer[MAX_BUFFLEN];
memset(szBuffer, 0x00, sizeof(szBuffer));

va_list ap;
va_start(ap, _format);

try
{
vsnprintf(szBuffer, MAX_BUFFLEN, _format, ap);
}
catch(...)
{
cout<<"ERROR: format the string failed..."<<endl;
return *this;
}

va_end(ap);
this->append(szBuffer);
return *this;
}

};

// 该类用于根据传入的数据,将数据存入map中
class CAnalyzeValue
{
private:
string m_strSect;
strMap *m_pMap;

public:
CAnalyzeValue(strMap &strmap):m_pMap(&strmap)
{
m_strSect = "";
}

~CAnalyzeValue()
{

}

void operator () (const string &strInput) const
{
int iFirst = strInput.find('[');
int iLast = strInput.find(']');

if (iFirst != string::npos && iLast != string::npos && iFirst != iLast + 1)
{
m_strSect = strInput.substr(iFirst + 1, iLast - iFirst - 1);
return;
}

if (m_strSect.empty())
{
return;
}

iFirst = strInput.find('=');
if (iFirst == string::npos)
{
return;
}

string strTemp1 = strInput.substr(0, iFirst);
string strTemp2 = strInput.substr(iFirst + 1, string::npos);

iFirst = strTemp1.find_first_not_of(" /t");
iLast = strTemp1.find_last_not_of(" /t");
if (iFirst == string::npos || iLast == string::npos)
{
return;
}

string strKey = strTemp1.substr(iFirst + 1, iLast - iFirst + 1);
iFirst = strTemp2.find_first_not_of(" /t");
if (((iLast = strTemp2.find("/t#", iFirst)) != string::npos) ||
((iLast = strTemp2.find(" #", iFirst)) != string::npos) ||
((iLast = strTemp2.find("/t//", iFirst)) != string::npos) ||
((iLast = strTemp2.find(" //", iFirst)) != string::npos))
{
strTemp2 = strTemp2.substr(0, iLast - iFirst);
}

iLast = strTemp2.find_last_not_of(" /t");
if (iFirst == string::npos || iLast == string::npos)
{
return;
}

string strValue = strTemp2.substr(iFirst, iLast - iFirst + 1);
string strMapkey = m_strSect + MIDDLESTRING;
strMapkey += strKey;
(*m_pMap)[strMapkey] = strValue;
return;

}
};

// 此类用于读取配置文件
class CReadConfig
{
public:
CReadConfig()
{
}

~CReadConfig()
{
}

bool OpenFile(const char *FileName)
{
return
}

string ReadCfg(const char * pSect, const char * pKey)
{
string strMapKey = pSect;
strMapKey += MIDDLESTRING;
strMapKey += pKey;

strmapIt iter;

iter = mapcfg.find(strMapKey);

if (iter == mapcfg.end())
{
return "";
}
else
{
return iter->second;
}
}

protected:

bool Do_OpenFile(const char *FileName)
{
ifstream fin(FileName);

if (!fin.is_open())
{
return false;
}

vector<string> strVect;

while (!fin.eof())
{
string strInput = "";
getline(fin, strInput, '/n');

strVect.push_back(strInput);
}

if (strVect.empty())
{
return false;
}

for_each(strVect.begin(), strVect.end(), CAnalyzeValue(mapcfg));
}

private:
strMap mapcfg;
};

#endif

分享到:
评论

相关推荐

    ini读取类,使用C++STL

    标题中的“ini读取类,使用C++STL”指的是使用C++标准模板库(Standard Template Library, STL)来设计和实现一个能够读取和操作.ini配置文件的类。.ini文件是一种常见的文本配置文件格式,常用于存储软件的设置和...

    STL的使用,文件的读取和改变格式

    在这个主题中,我们将深入探讨STL的使用以及如何处理文件读取和格式转换。 首先,让我们从STL的基本概念开始。STL的核心组件包括: 1. 容器:如vector、list、deque、set、map等,它们用于存储和管理数据。 2. 迭代...

    opengl读取stl文件

    - 通过对STL文件格式的详细分析,结合C++标准库的文件流读取功能以及OpenGL中的三角面片绘制技术,可以在VC++平台上实现对STL文件的有效读取和显示。这种技术在逆向工程、快速成型等领域有着广泛的应用前景。

    用STL实现的ini文件操作类

    标题 "用STL实现的ini文件操作类" 描述了一个使用C++标准模板库(STL)来处理ini配置文件的程序。ini文件是一种常见的文本格式,用于存储应用程序的配置设置。这种实现允许读取、写入和修改ini文件中的数据,以适应...

    标准C/C++读写配置文件类,读写ini文件,加入工程就可以用

    在IT行业中,配置文件是软件系统中不可或缺的一部分,它们存储应用程序的设置、参数或环境信息,使得程序可以根据用户的需求或特定环境进行个性化调整。而INI文件是一种常见的配置文件格式,尤其在Windows系统中广泛...

    利用STL编写的INI文件读写类

    INI文件是一种常见的文本配置文件格式,通常用于存储软件的设置和选项,结构简单,易于读写。 INI文件的基本结构由节(Section)、键(Key)和值(Value)组成。节用方括号([])包围,键值对则以等号(=)分隔。例如:...

    深入学习C++_String2.1版

    `string`可以通过各种方法进行格式化,如使用C语言的`snprintf`或者C++的`std::stringstream`。 **1.9 `string`与`CString`** 在MFC中,`CString`是一个广泛使用的类,用于处理字符串。它提供了一些额外的功能,如...

    STL实现的数据结构部分算法

    ### STL实现的数据结构部分算法详解 #### 杨辉三角的STL实现 在代码示例`4_1.cpp`中,我们看到一个使用C++标准模板库(STL)中的`queue`容器来生成和打印杨辉三角的例子。杨辉三角是一种在数学上常见的数列,每一...

    STL_File.zip_STL_reading_stl reader

    在C++实现STL reader时,可以使用标准模板库(Standard Template Library, STL)中的容器,如`std::vector`来存储顶点和法线信息,利用`std::ifstream`进行文件流操作,以及`std::string`处理文本数据。同时,为了...

    模拟ATM的最简单工作流程的C++代码

    这个系统涵盖了基础的控制台交互、文件操作以及标准模板库(STL)中的容器应用。下面我们将详细分析涉及的知识点。 1. **C++基础知识**: - **变量与数据类型**:在ATM系统中,会用到各种数据类型,如整型(int)...

    C++实现关联规则

    1. 数据预处理:在C++中实现关联规则的第一步是数据预处理,包括读取数据集、将数据转换为适合关联规则挖掘的格式,如交易列表。这通常涉及到文件I/O操作,例如使用fstream库读写文件,以及对字符串的处理,例如用...

    基于STL的简易字典

    在这个基于STL的简易字典项目中,我们利用了STL中的容器(如`std::map`)和输入/输出(IO流)功能来实现一个能够读取文件、存储和查询字典数据的程序。以下是这个项目的详细知识点: 1. **STL中的`std::map`**: `...

    ReadWriteini.zip

    本文将详细探讨如何使用C++的STL(Standard Template Library,标准模板库)来实现ini文件的读写操作,以及提供一个基于VS2019社区版的完整项目案例。 1. ini文件基础: ini文件通常包含多个section(段),每个...

    Standard C++ Library Reference 2

    根据给定的文件信息,我们可以深入探讨C++标准库(STL)的关键概念与细节,这份文档由IBM公司内部制作,作为C++ STL参考手册,提供了丰富的信息与指导,涵盖从基本的C库到复杂的C++特性,以及STL的重要组成部分。...

    读取各种文本类型的C++源码

    尤其是在C++这类支持多种编码环境的编程语言中,编写出能够读取包括ANSI、BOM UTF-8、UTF-8、GB 18030、UTF-16 BE和UTF-16 LE等不同编码格式的文本文件的源码,对于国际化应用的开发尤为重要。本文将详细介绍如何在...

    C++ 字符串使用详解

    7. **格式化输出**:C++11引入了`std::stringstream`,可以方便地进行格式化输出,如`std::stringstream ss; ss , Value: " ; std::string result = ss.str();`。 8. **正则表达式**:从C++11开始,标准库中提供了`...

    Standard C++ Library

    格式化输入涉及读取数据并将其转换为程序可以处理的形式。 - **扫描格式**:定义了如何解析输入数据的格式。 - **扫描函数**:提供了几种用于格式化输入的标准函数。 - **扫描转换说明符**:解释了如何使用转换说明...

    C++函数手册 英文版

    理解如何使用这些对象进行格式化输出、读取用户输入以及异常处理是C++编程的基础。 第四,STL容器是C++中组织和管理数据的关键组件,包括数组(`array`)、向量(`vector`)、列表(`list`)、映射(`map`)、集合...

    C++ LibraryFunctions

    3. **C函数库**:C++兼容C语言,因此也包含C标准库中的函数,如`printf`和`scanf`进行格式化输入输出,`malloc`和`free`进行动态内存分配和释放,`strcpy`和`strcat`处理字符串操作。 4. **IOstream操作库**:C++的...

Global site tag (gtag.js) - Google Analytics