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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 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还会持续更新代码。


相关文章
|
23天前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
49 8
|
21天前
|
数据采集 自然语言处理 搜索推荐
基于qwen2.5的长文本解析、数据预测与趋势分析、代码生成能力赋能esg报告分析
Qwen2.5是一款强大的生成式预训练语言模型,擅长自然语言理解和生成,支持长文本解析、数据预测、代码生成等复杂任务。Qwen-Long作为其变体,专为长上下文场景优化,适用于大型文档处理、知识图谱构建等。Qwen2.5在ESG报告解析、多Agent协作、数学模型生成等方面表现出色,提供灵活且高效的解决方案。
114 49
|
1月前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
49 2
|
1月前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
110 1
|
21天前
|
数据采集 存储 自然语言处理
基于Qwen2.5的大规模ESG数据解析与趋势分析多Agent系统设计
2022年中国上市企业ESG报告数据集,涵盖制造、能源、金融、科技等行业,通过Qwen2.5大模型实现报告自动收集、解析、清洗及可视化生成,支持单/多Agent场景,大幅提升ESG数据分析效率与自动化水平。
|
24天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
64 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
72 0
|
2月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
57 0
|
2月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
64 0
|
2月前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
85 0

推荐镜像

更多