inifile 一个轻量级的INI文件解析库
来源:互联网 发布:client mac and addr 编辑:程序博客网 时间:2024/06/12 10:09
目录(?)[-]
- inifile 一个轻量级的INI文件解析库
- INI文件的格式
- 重要说明
- IniFile的接口设计
- IniFile的特点
- IniFile的使用
- INI文件的格式
inifile 一个轻量级的INI文件解析库
ini文件是一种常见的配置文件。它以简单的文字与简单的结构组成.INI文件会以不同的扩展名,如".ini.",".cfg",".conf"等。
INI文件的格式
INI文件由3个重要的部分组成:参数(parameters),段(sections)和注释(comments).其格式如下:
- 段(sections)
[section]
- 参数(parameters)
name=value
- 注释(comments)
;comments
每个段包括段名,注释,和一定的参数对,段名不可重复。段内的参数对是有序的,可重复的。
注释一般以分号“;
”开头,在分号后面的文字,直到该行结尾都全部为注解。但是也有很多的配置文件的注释是以“#
”开头的。
重要说明
一般来说,段与段直接的名字是不能重复的。而段内的参数对是有序的,可重复的。虽然这种重复参数的情况比较少,但是有些地方还是会用到的。如OceanBase数据库的 Schema配置文件如下。
- [sys_table]
- table_id=1
- max_column_id=11
- table_type=1
- #rowkey is table name
- rowkey_is_fixed_length=0
- column_info=table_name,varchar,128
- column_info=table_id,int
- column_info=table_type,int
- column_info=rowkey_len,int
- column_info=max_column_id,int
INI文件不一定有段名,通常此时会为其增加一个默认的段名.
示例中存在段名,段名为sys_table
,在配置文件中不能再存在其他sys_table
段,而该段中的存在多个column_info
参数,每个参数表示sys_table
中的一个字段的信息。参数rowkey_is_fixed_length
还带有注释。
注释是提高配置文件可读性的重要方法。在解析的过程中一般会被忽略。但是如果你准备给你的解析库添加一个保存到文件的功能的话,就应该考虑到用户可能会为每个参数或者段添加注释的可能性。
IniFile的接口设计
接口设计必须要保证足够的稳定性和易用性。INI配置文件通常是启动时读,一旦启动程序,中途几乎不会修改配置文件。所以一个简单的解析库,首要目标是解决INI文件的解析,然后是在内存中修改内容,以及将内存修改后的内容保存到INI文件中去。
完整的解析至少要包括以下功能:
打开并解析一个名为fname的INI文件
int open(const string &fname);
获取section段第一个键为key的值,并将值赋到value中
int getValue(const string §ion,const string &key,string &value);
获取section段第一个键为key的值,并将值赋到value中,将注释赋到comment中
int getValue(const string §ion,const string &key,string &value,string &comment);
获取section段所有键为key的值,并将值赋到values的vector中
int getValues(const string §ion,const string &key,vector<string> &values);
获取section段所有键为key的值,并将值赋到values的vector中,将注释赋到comments的vector中
int getValues(const string §ion,const string &key,vector<string> &value,vector<string> &comments);
获取section段的注释
int getSectionComment(const string §ion,string & comment);
获取注释标记符列表
void getCommentFlags(vector<string> &flags);
- 设置注释标记符列表
void setCommentFlags(const vector<string> &flags);
如果要在程序中修改INI文件设置的值,并将修改后的内容保存到原来的INI文件或者其他文件,则需要包括以下功能:
- 将内容保存到当前文件
int save();
- 将内容另存到一个名为fname的文件
int saveas(const string &fname);
- 同时设置值和注释
int setValue(const string §ion,const string &key,const string &value,const string &comment="");
- 删除段
void deleteSection(const string §ion);
- 删除特定段的特定参数
void deleteKey(const string §ion,const string &key);
- 设置section段的注释
int setSectionComment(const string §ion,const string & comment);
IniFile的特点
- 支持解析ini文件
- 支持修改、保存ini文件
- 支持设置多个注释符,默认为“#”和';'
- 支持参数名重复
IniFile库既包含了INI文件的解析,也能够修改并保存INI文件。
解析过程中如果INI文件中没有指定段名,则会指定一个空字符串作为段名,段采用map
保存,而段中的参数则采用vector
保存,因此支持参数名重复。
IniFile除了适合用在一般后台程序读取配置文件,也能够帮助GUI界面程序提供参数配置,修改,保存等。
IniFile的使用
使用很简单 生成一个ini文件test.ini cat > test.ini
- #this is commit
- ;this is commit
- [COMMON]
- DB = mysql
- PASSWD=root
首先指定头文件和命名空间 然后使用open函数打开ini文件 getValue可以获取指定段的指定项的值
- #include "inifile.h"
- using namespace inifile;
- filepath = "test.ini";
- IniFile ini;
- ini.open(filepath);
- //获取指定段的指定项的值
- string db_name = ini.getValue("COMMON","DB");
- //设置新值和注释
- ini.setValue("TEST","NAME","root","用户名称");
- //保存到文件
- ini.save();
转自如下:
IniFile库的地址为:
https://github.com/Winnerhust/inifile2如果阅读本文过程中有任何问题,请联系作者,转载请注明出处!
- inifile 一个轻量级的INI文件解析库
- inifile 一个轻量级的INI文件解析库
- IniFile Ini操作
- 一个C语言解析ini文件的测试
- 一个开源的跨平台ini文件解析器
- C# ini 文件解析库
- PHP如何解析一个ini的配置文件?
- 一个简单实用的ini解析算法
- INI文件的解析方法的示例
- Javascript解析INI文件内容的函数
- IniFile.cs:C#来操作ini配置文件
- delphi中ini配置文件(Inifile)使用方法
- ini文件解析c库(iniparser)
- ini文件解析c库(iniparser)
- python 解析ini 文件
- ini文件解析器
- php解析.ini文件
- INI文件解析类
- Android学习笔记之AndroidManifest.xml文件解析
- javasc json转String
- POJ 1050 最大子矩阵和
- Action Bar of Android
- 用Selenium录制添加到购物车的测试用例
- inifile 一个轻量级的INI文件解析库
- 基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)
- 关于jsp中的Unable to compile class for JSP解决
- Android (DiskLruCache)硬盘缓存代码实现
- RegexKitLite实现正则表达式
- Appium上的截图保存
- iFrame
- ReentrantLock可重入锁的使用场景
- Oracle RAC核心技术详解——互动出版网