您的位置:首页 > 产品设计 > UI/UE

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: