key_value 类型配置文件的解析
#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 类型配置文件的解析的更多相关文章
- WCF 已知类型和泛型解析程序 KnownType
数据协定继承 已知类型和泛型解析程序 Juval Lowy 下载代码示例 自首次发布以来,Windows Communication Foundation (WCF) 开发人员便必须处理数据协定继承方 ...
- Spring系列之手写注解与配置文件的解析
目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 Spring系列之AOP的原理及手动实现 引入 在前面我们已经完成了IOC,DI,AOP的实现,基本的功能都已经 ...
- mybatis源码-解析配置文件(四-1)之配置文件Mapper解析(cache)
目录 1. 简介 2. 解析 3 StrictMap 3.1 区别HashMap:键必须为String 3.2 区别HashMap:多了成员变量 name 3.3 区别HashMap:key 的处理多 ...
- Spring——ClassPathXmlApplicationContext(配置文件路径解析 1)
ClassPathXmlApplicationContext 在我的 BeanFactory 容器文章中主要提及了 BeanFactory 容器初始化(Spring 配置文件加载(还没解析)) ...
- java内存分配和String类型的深度解析
[尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...
- 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)
解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...
- C#匿名类型和动态解析减少定义传输类模板
C#作为强类型语言,在序列化和反序列化(json)场景中对字符串解析常常需要定义强类型模板,造成编码上的繁琐.其实可以使用匿名类型和动态解析减少json序列化时候的数据模板定义: string a = ...
- mybatis源码-解析配置文件(四)之配置文件Mapper解析
在 mybatis源码-解析配置文件(三)之配置文件Configuration解析 中, 讲解了 Configuration 是如何解析的. 其中, mappers作为configuration节点的 ...
- 【转】java内存分配和String类型的深度解析
一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...
随机推荐
- Fibonacci Again
Problem Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) ...
- TYVJ P1023 奶牛的锻炼 Label:dp
背景 USACO 描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0).若她在第i分钟休息,则疲倦程度减少1.无论何时 ...
- 关于JS中作用域的销毁和不销毁的情况总结
window全局作用域->页面关掉才销毁函数执行会形成私有的作用域 1)作用域的销毁 一般情况下,函数执行形成一个私有的作用域,当执行完成后就销毁了->节省内存空间 2)作用域的不立即销毁 ...
- jQuery 写的插件图片上下切换幻灯效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Response.Write 打开新窗口
Response.Write 打开新窗口 string url=" XXX.aspx?aaa="+bbb"; Response.Write(" <scri ...
- NSString 处理技巧:分割字符串
摘要 string类型是objective-c中用的最多的类型之一,有时会出现字符串中有我们不想要的字符. 如 "hello world"中的空格,或是"hello/wo ...
- 相关css 细节处理 neat.css
人性化的细节处理 例如: textarea 默认只能垂直拖动,防止宽度改变破坏布局. textarea { resize: vertical; } 汉字字号小于 12px 不易阅读,为 <sma ...
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
- windows下的mongodb分片配置
1. 分片服务器设置mongod -port 10001 -dbpath=F:/DbSoft/mongodb/rs_data/master -directoryperdb --shardsvr -re ...
- [英语学习]国外的在线广播网站,类似喜马拉雅和荔枝FM
今天在Seattle Art Museum 网站上看东西,发现了这个好网站. 主要是外文资料,可以练听力,也可以找到<我爱吕西安>的英文版本. https://soundcloud.co ...