ini格式数据生成与解析具体解释
1、ini格式数据长啥样?
2、ini格式数据简单介绍
INI文件的命名来源,是取自英文“初始(Initial)”的首字缩写,正与它的用途——初始化程序对应。
有时候。INI文件也会以不同的扩展名,如“.cfg”、“.conf”(在Linux系统中也经常使用到)、或是“.txt”取代(从辨识度的角度。不建议使用)。
3、ini格式数据适用场景
INI文件是一个无固定标准格式的配置文件。它以简单的文字与简单的结构组成,常用在windows或是其它OS(Linux等)上。
4、经常使用开源的CIniFile注意事项?
1)将iniFile.h、iniFile.cpp包括到自己的project中;
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 << " " << iDBPort << " " << strDBSId << " " << strDBUserName << " " << strDBPassword << endl; //获取相应Session下的每一个key的名称。 string strPath = iniFile.GetValueName("EnvConfig",0); string strTnsName = iniFile.GetValueName("EnvConfig",1); string strNlsLang = iniFile.GetValueName("EnvConfig",2); cout << strPath << " " << strTnsName << " " << strNlsLang << endl; //获取一个Session下的"key-value"对数。cout << iniFile.NumValues("EnvConfig") << endl; }
7、ini格式数据解析源代码
8、执行结果示意:
后记:
1) 项目中发现公司中对.ini、.conf格式数据存在多个版本号的解析,大多都是前辈们自己写的,多半都是有大大小小的bug,不便于自己使用。而以上CIniFile使用简单,不是必需反复“造轮子”,能够非常方便移植到项目中。
2)已经对作者的代码发现问题做了几处小的修改。兴许发现Bug还会持续更新代码。
2014-7-5 pm18:59 思于家中床前
作者:铭毅天下
转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/46764715
假设感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!