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

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


目录
打赏
0
0
0
0
581
分享
相关文章
深度解析淘宝商品详情API接口:解锁电商数据新维度,驱动业务增长
淘宝商品详情API接口,是淘宝开放平台为第三方开发者提供的一套用于获取淘宝、天猫等电商平台商品详细信息的应用程序接口。该接口涵盖了商品的基本信息(如标题、价格、图片)、属性参数、库存状况、销量评价、物流信息等,是电商企业实现商品管理、市场分析、营销策略制定等功能的得力助手。
深度解析:利用商品详情 API 接口实现数据获取与应用
在电商蓬勃发展的今天,数据成为驱动业务增长的核心。商品详情API接口作为连接海量商品数据的桥梁,帮助运营者、商家和开发者获取精准的商品信息(如价格、描述、图片、评价等),优化策略、提升用户体验。通过理解API概念、工作原理及不同平台特点,掌握获取权限、构建请求、处理响应和错误的方法,可以将数据应用于商品展示、数据分析、竞品分析和个性化推荐等场景,助力电商创新与发展。未来,随着技术进步,API接口将与人工智能、大数据深度融合,带来更多变革。
62 3
数据大爆炸:解析大数据的起源及其对未来的启示
数据大爆炸:解析大数据的起源及其对未来的启示
94 15
数据大爆炸:解析大数据的起源及其对未来的启示
|
1月前
|
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
42 12
mindspeed-llm源码解析(一)preprocess_data
mindspeed-llm是昇腾模型套件代码仓,原来叫"modelLink"。这篇文章带大家阅读一下数据处理脚本preprocess_data.py(基于1.0.0分支),数据处理是模型训练的第一步,经常会用到。
56 0
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
陪玩系统源码开发流程解析,成品陪玩系统源码的优点
我们自主开发的多客陪玩系统源码,整合了市面上主流陪玩APP功能,支持二次开发。该系统适用于线上游戏陪玩、语音视频聊天、心理咨询等场景,提供用户注册管理、陪玩者资料库、预约匹配、实时通讯、支付结算、安全隐私保护、客户服务及数据分析等功能,打造综合性社交平台。随着互联网技术发展,陪玩系统正成为游戏爱好者的新宠,改变游戏体验并带来新的商业模式。

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等