#include <iostream>
#include <string>
#include <stdint.h>
#include <map>
#include <fstream>
#include <stdlib.h>
#include <stdio.h> enum
{
enmMaxConfigWordLen = ,
}; 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 = ;
while(file.get(c) && readBufLen < maxBufLen)
{
if(c != '\n' && c != ' ' && c != )
{
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 = ,len = ; //0->key,1->value
for(uint32_t i = ;i < bufLen; ++i)
{
const char &c = buf[i];
switch(c)
{
case '{':flag=;break;
case '}':
value[len] = '\0';
attrMap[key] = value;
break;
case ':':
key[len] = '\0';
len = ;
flag = ;
break;
case ',':
value[len] = '\0';
len = ;
flag = ;
attrMap[key] = value;
break;
default:
if( flag == )
{
key[len++] = c;
}
else if( flag == )
{
value[len++] = c;
}
break;
}
}
} int32_t main()
{
const uint32_t maxFileBufLen = ;
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 ;
}

测试文件:

{
host:192.168.75.134,
port:,
user:sdo,
passwd:,
dbname:sdo_config,
tablename:sdo_item
}

测试结果:

szHost = '192.168.75.134'
szUsr = 'sdo'
szPasswd = ''
szDbName = 'sdo_config'
szTableName = 'sdo_item'
unPort =

key_value 类型配置文件的解析的更多相关文章

  1. WCF 已知类型和泛型解析程序 KnownType

    数据协定继承 已知类型和泛型解析程序 Juval Lowy 下载代码示例 自首次发布以来,Windows Communication Foundation (WCF) 开发人员便必须处理数据协定继承方 ...

  2. Spring系列之手写注解与配置文件的解析

    目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 Spring系列之AOP的原理及手动实现 引入 在前面我们已经完成了IOC,DI,AOP的实现,基本的功能都已经 ...

  3. mybatis源码-解析配置文件(四-1)之配置文件Mapper解析(cache)

    目录 1. 简介 2. 解析 3 StrictMap 3.1 区别HashMap:键必须为String 3.2 区别HashMap:多了成员变量 name 3.3 区别HashMap:key 的处理多 ...

  4. Spring——ClassPathXmlApplicationContext(配置文件路径解析 1)

    ClassPathXmlApplicationContext     在我的 BeanFactory 容器文章中主要提及了 BeanFactory 容器初始化(Spring 配置文件加载(还没解析)) ...

  5. java内存分配和String类型的深度解析

    [尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...

  6. 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)

    解剖SQLSERVER 第四篇  OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...

  7. C#匿名类型和动态解析减少定义传输类模板

    C#作为强类型语言,在序列化和反序列化(json)场景中对字符串解析常常需要定义强类型模板,造成编码上的繁琐.其实可以使用匿名类型和动态解析减少json序列化时候的数据模板定义: string a = ...

  8. mybatis源码-解析配置文件(四)之配置文件Mapper解析

    在 mybatis源码-解析配置文件(三)之配置文件Configuration解析 中, 讲解了 Configuration 是如何解析的. 其中, mappers作为configuration节点的 ...

  9. 【转】java内存分配和String类型的深度解析

    一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...

随机推荐

  1. <html:option获取文本值

    <p class="w120">变更后IP:</p> <div class="comBobox w200 f_l"> < ...

  2. 在thinkphp框架模板中引用session

    我已经将模板引擎配置为smarty,在模板中使用常量是写为 {$smarty.const.ADMIN_IMG} 到使用到session的值时这样写 {$smarty.session.mg_name}

  3. ThinkPHP之APP_DEBUG给我带来的问题

    1.刚开始学习Thinkphp,在模块分组之后,自己配置了模块分组后,发现打不开网页了,分组配置如图 2.问题现象如图 在处理空模块时写的函数也不能运行 这时我很困惑,一直检查自己的拼写和配置没发现错 ...

  4. 找1到n所有整数出现1的个数

    编程之美2.4 n=12时,1,11,12这3个数包含1,所以1的个数是5. Line 9是为了防止factor溢出. #include <iostream> #include <s ...

  5. Huffman

    huffman是非常基础的压缩算法. 实现霍夫曼树的方式有很多种,可以使用优先队列(Priority Queue)简单达成这个过程,给与权重较低的符号较高的优先级(Priority),算法如下: ⒈把 ...

  6. Powershell的远程管理

    powershell有强大的远程管理功能,但是现在遇到个问题,我们之前的客户端操作系统都是默认安装的,没做默认设置,请问如何通过gpo将所有和远程有关的设置都搞定啊?到底要设置哪些个选项?   我的环 ...

  7. MyEclipse的注册过程

    说在前面的话: 说到收费软件MyEclipse,大家可能对它又爱又恨,其实软件收钱也是为了有更好的发展,我们的建议是先试用,如果觉得不错,可以使用正版软件! 准备工作: 1.MyEclipse安装文件 ...

  8. HDU 1688 Sightseeing&HDU 3191 How Many Paths Are There(Dijkstra变形求次短路条数)

    Sightseeing Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. [ZZ] D3D中的模板缓存(3)

    http://www.cppblog.com/lovedday/archive/2008/03/25/45334.html http://www.cppblog.com/lovedday/ D3D中的 ...

  10. tomcat bug之部署应用的时候经常会发上startup failed due to previous errors

    在tomcat上部署应用的时候经常会发上startup failed due to previous errors错误.这个错误产生以后经常会让人摸不到头脑.以下是几点查找经验: 1.web.xml文 ...