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

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: 1、ini格式数据长啥样?

image.png

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、运行结果示意:

image.png

后记:

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

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


相关文章
|
9月前
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
569 4
JSON数据解析实战:从嵌套结构到结构化表格
|
9月前
|
JSON 监控 网络协议
Bilibili直播信息流:连接方法与数据解析
本文详细介绍了自行实现B站直播WebSocket连接的完整流程。解析了基于WebSocket的应用层协议结构,涵盖认证包构建、心跳机制维护及数据包解析步骤,为开发者定制直播数据监控提供了完整技术方案。
|
9月前
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
|
9月前
|
缓存 监控 搜索推荐
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。
|
9月前
|
存储 缓存 监控
如何高效爬取天猫商品数据?官方API与非官方接口全解析
本文介绍两种天猫商品数据爬取方案:官方API和非官方接口。官方API合法合规,适合企业长期使用,需申请企业资质;非官方接口适合快速验证需求,但需应对反爬机制。详细内容涵盖开发步骤、Python实现示例、反爬策略、数据解析与存储、注意事项及扩展应用场景。推荐工具链包括Playwright、aiohttp、lxml等。如需进一步帮助,请联系作者。
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
362 2
|
9月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
897 29
|
9月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
368 4
|
9月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
9月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。

热门文章

最新文章

推荐镜像

更多
  • DNS