key_value 类型配置文件的解析
2016-05-27 23:03
435 查看
#include <iostream> #include <string> #include <stdint.h> #include <map> #include <fstream> #include <stdlib.h> #include <stdio.h> enum { enmMaxConfigWordLen = 32, }; typedef std::map<std::string,std::string> ATTRMAP; void GetTextFileContent(const char *fileName,char buf[],const uint32_t maxBufLen,uint32_t &readBufLen) { std::ifstream file(fileName,std::ios::in); if(!file) { return ; } char c; readBufLen = 0; while(file.get(c) && readBufLen < maxBufLen) { if(c != '\n' && c != ' ' && c != 9) { buf[readBufLen++] = c; } } buf[readBufLen]='\0'; } void GetAllAttrFromStr(const char *buf,const uint32_t bufLen,ATTRMAP &attrMap) { char key[enmMaxConfigWordLen],value[enmMaxConfigWordLen]; int32_t flag = 0,len = 0; //0->key,1->value for(uint32_t i = 0;i < bufLen; ++i) { const char &c = buf[i]; switch(c) { case '{':flag=0;break; case '}': value[len] = '\0'; attrMap[key] = value; break; case ':': key[len] = '\0'; len = 0; flag = 1; break; case ',': value[len] = '\0'; len = 0; flag = 0; attrMap[key] = value; break; default: if( flag == 0 ) { key[len++] = c; } else if( flag == 1 ) { value[len++] = c; } break; } } } int32_t main() { const uint32_t maxFileBufLen = 1024; char buf[maxFileBufLen]; uint32_t bufLen; GetTextFileContent("dbconfig.cfg",buf,maxFileBufLen,bufLen); ATTRMAP attrMap; GetAllAttrFromStr(buf,bufLen,attrMap); std::string szHost = attrMap["host"]; std::string szUsr = attrMap["user"]; std::string szPasswd = attrMap["passwd"]; std::string szDbName = attrMap["dbname"]; std::string szTableName = attrMap["tablename"]; uint32_t unPort = atol(attrMap["port"].c_str()); printf("szHost = '%s'\nszUsr = '%s'\nszPasswd = '%s'\nszDbName = '%s'\nszTableName = '%s'\nunPort = %d\n",\ szHost.c_str(),szUsr.c_str(),szPasswd.c_str(),szDbName.c_str(),szTableName.c_str(),unPort); return 0; }
测试文件:
{ host:192.168.75.134, port:3306, user:sdo, passwd:123456, dbname:sdo_config, tablename:sdo_item }
测试结果:
szHost = '192.168.75.134' szUsr = 'sdo' szPasswd = '123456' szDbName = 'sdo_config' szTableName = 'sdo_item' unPort = 3306
相关文章推荐
- UILabel 添加中划线和下划线
- Menu基本介绍实现
- 关于fragment
- 系统uid在1-499的原因
- 100. Implement Queue using Stacks
- java GUI 简单计算器实现
- LeetCode No334. Increasing Triplet Subsequence
- xuegod2阶段10
- 百度ueditor 实例化 Cannot set property 'innerHTML' of null 完美解决方案
- Linkit 7688 DUO(五) 接上各种Arduino传感器和模块—扩展篇
- ue4打包失败
- 论文笔记之:Localizing by Describing: Attribute-Guided Attention Localization for Fine-Grained Recognition
- easyui 分页中page和rows参数
- stack or queue
- 关于easyui grid中的load,reload,loadData区别
- CODEFORCES 645E Intellectual Inquiry
- POJ 2818 Building Block (并查集)(寻找一个元素下面有多少个元素)
- 椭圆人头跟踪bmp图像序列 BMP Image Sequences for Elliptical Head Tracking
- 椭圆人头跟踪bmp图像序列 BMP Image Sequences for Elliptical Head Tracking
- UIView动画实现