ini格式数据生成与解析详解

ini格式数据生成与解析详解

1、ini格式数据长啥样?

2、ini格式数据简介

INI文件的命名来源,是取自英文“初始(Initial)”的首字缩写,正与它的用途——初始化程序相应。

有时候,INI文件也会以不同的扩展名,如“.cfg”、“.conf”(在Linux系统中也常用到)、或是“.txt”代替(从辨识度的角度,不建议使用)。

3、ini格式数据适用场景

INI文件是一个无固定标准格式的配置文件。它以简单的文字与简单的结构组成,常常使用在windows或是其他OS(Linux等)上。

4、常用开源的CIniFile注意事项?

http://www.codeforge.cn/read/181985/memleak_test.cpp__html

1)将iniFile.h、iniFile.cpp包含到自己的工程中;

2)读取的时候需要进行配置文件路径初始化,函数接口:构造函数或者Initialize( ).

解析前需要将所有配置文件ini格式数据读取到缓存区以便解析,函数接口:ReadFile( ).

5、构造ini格式数据

//ini文件初始化、写入文件测试.
void BuildAndWriteIniToFile()
{
	CIniFile iniFile( "./ini_oracle_test.ini");

	//读取文件
	iniFile.ReadFile();

	//读取ini文件中的session个数.
	cout << "NKeys = " << iniFile.NumKeys() << endl;

	//new add array_data 新增数据
	iniFile.SetValue( "section3", "TASK_ID", "3");   //格式为:session--Key--Value形式.
	iniFile.SetValue( "section3", "SYSTEM_ID", "22");
	iniFile.SetValue( "section3", "TASK_NAME", "\"test\"");
	iniFile.SetValue( "section3", "START_TIME", "25-11月-14 02.49.00.000000000  下午");
	iniFile.SetValue( "section3", "END_TIME", "25-11月-14 02.55.00.000000000 下午	");
	iniFile.SetValue( "section3", "EVENT_ID", "3");
	iniFile.SetValue( "section3", "AUTO_PROBE", "N");

	//写入文件
	iniFile.WriteFile();

	// Lookup what we have now. 查询key个数.
	for ( unsigned keyID = 0; keyID < iniFile.NumKeys(); ++keyID)
	{
		cout << "Key = " << iniFile.KeyName( keyID) << endl;

		//查询对应key的value个数.
		for ( unsigned valueID = 0; valueID < iniFile.NumValues( keyID); ++valueID)
		{
			cout << "   ValueName = " << iniFile.ValueName( keyID, valueID) <<
				"  Value = " << iniFile.GetValue( keyID, valueID) << endl;
		}//end for valueID
	}//end for keyID

}

6、解析ini格式数据

//读取并解析iniFile
void ReadAndParseServerIni()
{
	const string strConfigPath = string(g_pszServerConfig);
	CIniFile iniFile;

	//初始化,设置ini文件路径.
	iniFile.Initialize(strConfigPath);

	//读取文件.
	iniFile.ReadFile();

	/********************************************************
	[listen]
	listen_port=7200
	********************************************************/
	//获取对应Session为listen, key为listen_port 对应的value值.
	int nPort = iniFile.GetValueI( "listen", "listen_port");
	cout << nPort << endl;

	string strDBIp = iniFile.GetValue("Oracle_conn_info", "DBIP");
	int    iDBPort = iniFile.GetValueI("Oracle_conn_info", "DBPort");
	string strDBSId = iniFile.GetValue("Oracle_conn_info", "DBSID");
	string strDBUserName = iniFile.GetValue("Oracle_conn_info", "DBUserName");
	string strDBPassword = iniFile.GetValue("Oracle_conn_info", "DBPassword");

	cout << strDBIp << "\t" << iDBPort << "\t" << strDBSId << "\t" << strDBUserName << "\t" << strDBPassword << endl;

	//获取对应Session下的每个key的名称。
	string strPath = iniFile.GetValueName("EnvConfig",0);
	string strTnsName = iniFile.GetValueName("EnvConfig",1);
	string strNlsLang = iniFile.GetValueName("EnvConfig",2);
	cout << strPath << "\t" << strTnsName << "\t" << strNlsLang << endl;

	//获取一个Session下的"key-value"对数。
	cout << iniFile.NumValues("EnvConfig") << endl;

}

7、ini格式数据解析源码

下载地址:http://download.csdn.net/detail/wojiushiwo987/8871011

8、运行结果示意:

后记:

1) 项目中发现公司中对.ini、.conf格式数据存在多个版本的解析,大多都是前辈们自己写的,多半都是有大大小小的bug,不便于自己使用。而以上CIniFile使用简单,没必要重复“造轮子”,可以很方便移植到项目中。

2)已经对作者的代码发现问题做了几处小的改动,后续发现Bug还会持续更新代码。

2014-7-5 pm18:59 思于家中床前

作者:铭毅天下

转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/46764715

如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-29 23:16:58

ini格式数据生成与解析详解的相关文章

JSON数据构造及解析详解

1.JSON格式数据长啥样? 2.JSON简介 JSON(Javascript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成. 1)可读性:Json和XML相比可谓不相上下,一边是简单的语法,一边是规范的标签形式,很难分出胜负. 2)可扩展性:XML天生有很好的可扩展性,Json也有. 3)编码难度:XML有丰富的编码工具,Json也有提供,但是XML要输入很多结构字符. 4)解码难度:凡是可扩展的数据结构,解析起来都很困难. 5)数据量: J

解析activity之间数据传递方法的详解

转自:http://www.jb51.net/article/37227.htm 本篇文章是对activity之间数据传递的方法进行了详细的分析介绍,需要的朋友参考下 1  基于消息的通信机制 Intent--------boudle,extra用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等详细介绍下Intent机制Intent包含两部分:1 目的[action]-------要去到哪里去2 内容[category.data]----------路上带些什么,

android Json解析详解

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语 言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为– Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.JSON相对于XML来讲,数据的体积小 4.JSON与JavaScript的交互更加方便

ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对比

ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间移动对象 3.可以在数据库之间移动对象 4.可以实现表空间转移 二.EXPDP的命令详解 C:\Users\Administrator>20:42:32.90>expdp help=y Export: Release 11.2.0.1.0 - Production on 星期六 10月 10 09

IA-32指令解析详解

IA-32指令解析详解 0x00 前言 这段时间忙于考试,信息论和最优化,还有算法分析,有点让人头大.期间花了几天看SEH机制,能明白个大概,但是对于VC++对于SHE的包装似乎还是不是很明白,发现逆向工程核心原理对于这段写的太简单,至于加密与解密则是模棱两可,软件加密技术内幕倒是详解了,可是太老了,代码又是汇编写的总是编译不通过.真是让人难受!本来想写一篇SEH详解,但是基于以上原因暂时搁置.这两天看了逆向核心原理关于IA-32指令解析的内容,发现还是挺有意思,遂记录下来. 0x01 何谓IA

(转)MVC 3 数据验证 Model Validation 详解

继续我们前面所说的知识点进行下一个知识点的分析,这一次我们来说明一下数据验证.其实这是个很容易理解并掌握的地方,但是这会浪费大家狠多的时间,所以我来总结整理一下,节约一下大家宝贵的时间. 在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的数据验证Attribute来进行我们的数据验证.并且MVC 提供了客户端和服务器端 双层的验证,只有我们禁用了客

8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解

本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to Entities 使用LINQ to Entities操作实体 LINQ操作 懒加载和预加载 插入数据 更新数据 删除数据 本章小结 本人的实验环境是VS 2013 Update 5,windows 10,MSSQL Server 2008. 上一篇<Code First开发系列之领域建模和管理实体关系>,我们主要介绍了EF中“约定大于配置”的概念,如何创建数据

Android 数据加密算法 Des,Base64详解

一,DES加密: 首先网上搜索了一个DES加密算法工具类: import java.security.*;import javax.crypto.*; public class DesHelper { private static String strDefaultKey = "national";          private Cipher encryptCipher = null;          private Cipher decryptCipher = null;  

Android配置文件分享和JSON数据生成与解析

首先声明,我这里大体是讲的一个关于"Android配置文件分享和JSON数据生成与解析"的整体流程,具体数据库中的数据根据读者自己的项目来安排,如果您看不大懂也请您原谅,毕竟我说了,我只是新手.其实关于数据库中的数据你只需要知道他们都是一个个对象,然后有各自的属性就行了,我们的关键在于JSON数据的生成与解析. 鉴于自己的是个博客新手,感觉自己的博客访问量有些少可能是因为自己确实知识匮乏,毕竟我早就说了,我不适合编程,但是没办法啊,我要去读个文学博士的话,怕是要遭人白眼了,故而以后的事