INI配置文件分析小例子
随手写个解析INI配置字符串的小例子 带测试
#include <iostream>
#include <map>
#include <string>
#include "unittest.h" bool IniParser(std::string inputStr,std::map<std::string,std::string>& keyValueMap){
bool ret = false;
size_t keyStart = 0; for(keyStart= 0 ;keyStart < inputStr.size();keyStart++){
if(inputStr[keyStart] == ' '){
continue; //去除空格
}else if( inputStr[keyStart] == ';' || inputStr[keyStart] == '#' ||
inputStr[keyStart] == '[' || inputStr[keyStart] == ']' || inputStr[keyStart] == '='){
return ret; // 各种意外开头 直接返回失败
}else{
break;
}
}
size_t findPos = inputStr.find_first_of("=",keyStart);
if(std::string::npos == findPos){
return ret;//没有找到"="
}
std::string keyString = inputStr.substr(keyStart,findPos -keyStart); // std::cout << "keyString:" << keyString << std::endl; for(keyStart= findPos+1 ;keyStart < inputStr.size();keyStart++){
if(inputStr[keyStart] == ' '){
continue; //去除空格
}else{
break;
}
} std::string valueString = inputStr.substr(keyStart); //std::cout << "valueString:" << valueString << std::endl; keyValueMap.insert(std::pair<std::string,std::string>(keyString,valueString));
ret = true;
return ret;
} std::string testStr1 = "key=value";
std::string testStr2 = " key = value"; std::string testStr3 = "# key=value";
std::string testStr4 = "== key=value";
std::string testStr5 = "[ 23423key=value";
std::string testStr6 = "]324234key=value";
std::string testStr7 = ";key= = value";
std::string testStr8 = " key = = value"; int main(int argc, char *argv[])
{ std::map<std::string,std::string> keyValueMap; EXCEPT_EQ( IniParser(testStr1,keyValueMap),true);
EXCEPT_EQ( IniParser(testStr2,keyValueMap),true);
EXCEPT_EQ( IniParser(testStr3,keyValueMap),false);
EXCEPT_EQ( IniParser(testStr4,keyValueMap),false);
EXCEPT_EQ( IniParser(testStr5,keyValueMap),false);
EXCEPT_EQ( IniParser(testStr6,keyValueMap),false);
EXCEPT_EQ( IniParser(testStr7,keyValueMap),false);
EXCEPT_EQ( IniParser(testStr8,keyValueMap),true); PRINT_TEST_RESULT();
return 0;
}
测试头文件
#ifndef UNITTEST_H
#define UNITTEST_H
#include <iostream> class MyTestClass {
static size_t testCount_;
static size_t testPass_;
public:
template<typename E,typename A>
bool ExceptEqual(E e, A a)
{
testCount_++;
if (e == a){
testPass_++;
return true;
}
return false;
} void PrintResult(){
std::cout << testPass_ << "/" << testCount_ << "\t" << "("<<(testPass_ * 100.0 / testCount_) << "%)" << " passed." << std::endl;
}
};
size_t MyTestClass::testCount_ = 0;
size_t MyTestClass::testPass_ = 0; #define ERROR_PRINT(expect,actual) \
std::cerr << __FILE__ <<":"<< __LINE__ << "\r\nexpect: " << expect << " actual: " << actual << std::endl; #define EXCEPT_EQ(expect, actual) \
do{ \
MyTestClass TEST; \
if(!TEST.ExceptEqual(expect, actual)){ \
ERROR_PRINT(expect,actual) \
} \
}while(0) #define PRINT_TEST_RESULT() \
do{ \
MyTestClass TEST; \
TEST.PrintResult(); \
}while(0) #endif // UNITTEST_H
INI配置文件分析小例子的更多相关文章
- 使用Trinity拼接以及分析差异表达一个小例子
使用Trinity拼接以及分析差异表达一个小例子 2017-06-12 09:42:47 293 0 0 Trinity 将测序数据分为许多独立的de Brujin grap ...
- Spring aop 小例子demo
由于最近的服务项目提供接口有一个需求,所有操作都必须检查操作的服务可用,所以感觉Aop特别适合实施.完成学习的小例子. 关于spring-Aop原理:http://m.oschina.net/blog ...
- php.ini配置文件参数中文说明文档
转自 https://blog.csdn.net/seoyundu/article/details/101147041 中文翻译php.ini配置文件 [PHP php.ini-dist] ;;;; ...
- MySQL配置文件my.cnf 例子最详细翻译
转的 MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载 ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
- 【个人使用.Net类库】(1)INI配置文件操作类
开发接口程序时,对于接口程序配置的IP地址.端口等都需要是可配置的,而在Win Api原生实现了INI文件的读写操作,因此只需要调用Win Api中的方法即可操作INI配置文件,关键代码就是如何调用W ...
- spring小例子-springMVC+mybits整合的小例子
这段时间没更博,找房去了... 吐槽一下,自如太坑了...承诺的三年不涨房租,结果今年一看北京房租都在涨也跟着涨了... 而且自如太贵了,租不起了.. 突然有点理解女生找对象要房了.. 搬家太 ...
- 五个小例子教你搞懂 JavaScript 作用域问题
众所周知,JavaScript 的作用域和其他传统语言(类C)差别比较大,掌握并熟练运用JavaScript 的作用域知识,不仅有利于我们阅读理解别人的代码,也有助于我们编写自己的可靠代码. 下面笔者 ...
- lucene.net 3.0.3、结合盘古分词进行搜索的小例子(转)
lucene.net 3.0.3.结合盘古分词进行搜索的小例子(分页功能) 添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能, ...
随机推荐
- C# 生成表格代碼
public ActionResult btnExport(ReportViewModel model) { //接收需要导出的数据 L ...
- java后端书籍推荐
书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可 ...
- NTFS u盘支持 - centos6
uname -r bash-4.1# uname -r2.6.32-431.el6.x86_64 ---- http://repository.it4i.cz/mirrors/repoforge/re ...
- 博客CSS
<p style="background: #CFE0F8; padding: 5px;">理解Code First及其约定和配置</p> <p id ...
- Scala
简直就是java啊,mac上,下载,添加环境变量,source 就好了
- Parallel线程使用
Parallel的静态For,ForEach和Invoke方法 在一些常见的编程情形中,使用任务也许会提升性能.为了简化编程,静态类System.Threading.Tasks.Paral ...
- reference
z@z:~$ g++ -std=c++11 ref.cpp ref.cpp:7:10: error: invalid conversion from 'int' to 'int*' [-fpermis ...
- MacOS清除管理员密码
1.重启 mac ,按住 Command + s 键,进入当用户模式,直达出现黑底白字的屏幕,再松开.输入(重新挂载根文件系统为可读写):mount -uw / 2.然后输入:rm /var/db/. ...
- POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目
http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...
- PLL失锁
2016-07-05 现象:在低温(-30度以下)下,射频锁定信号出现周(大约20ms)期性高低电平的变化,由于MCU检测一次需要的时间很长(大于500ms), 大概总是检测不到失锁状态,所以不会出现 ...