#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. 安装Kali Linux操作系统Kali Linux无线网络渗透

    安装Kali Linux操作系统Kali Linux无线网络渗透 Kali Linux是一个基于Debian的Linux发行版,它的前身是BackTrack Linux发行版.在该操作系统中,自带了大 ...

  2. 面向对象之对象,作用域及this

    object eg: var o = { a : 2, b : 3 }; console.log(o); console.log(typeof o); console.log(o.a.toFixed( ...

  3. http://jingyan.baidu.com/article/db55b609aac41e4ba30a2f86.html

    http://jingyan.baidu.com/article/db55b609aac41e4ba30a2f86.html

  4. Assets/Sciprts/GameSciprt.js(97,46): BCE0044: expecting :, found ','.

    function BuildDeck() { var totalRobots:int=4; var card:Object; var i:int; for(i=0;i<totalRobots;i ...

  5. BZOJ3906 : Trie

    将输入的Trie建成AC自动机,并建出fail树. 那么操作1等价于在给定点的子树的并集里都加1. 操作2等价于查询给定点到根节点路径的并集的权值和. 求出DFS序后,对于操作1,将点按进入时间戳从小 ...

  6. Java中的HashTable详解

    Hashtables提供了一个很有用的方法可以使应用程序的性能达到最佳. Hashtables(哈 希表)在计算机领域中已不 是一个新概念了.它们是用来加快计算机的处理速度的,用当今的标准来处理,速度 ...

  7. 【BZOJ】1054: [HAOI2008]移动玩具(bfs+hash)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1054 一开始我还以为要双向广搜....但是很水的数据,不需要了. 直接bfs+hash判重即可. # ...

  8. HDU 4649 Professor Tian(DP)

    题目链接 暴力水过的,比赛的时候T了两次,优化一下初始化,终于水过了. #include <cstdio> #include <cstring> #include <st ...

  9. APIO2015

    还没有写完APIO2015的题目,打算今天写一写. T1: 按位DP,DP时要保证已确定的位为0. 前4组设f[n][k]表示把前n个分成k组是否合法. 最后一组设g[n]表示把前n个最少分为多少组才 ...

  10. Xshell选中的同时把内容复制到剪贴板(还可以设置设置文本分隔符)

    1.设置对话框 工具 -> 选项 -> 键盘和鼠标 -> 将选定的文本自动复制到剪贴板 2.贴图如下 2.1.打开设置对话框 2.2.设置键盘鼠标,左键复制 2.3.右键粘贴 作者: ...