inifile 一个轻量级的INI文件解析库
文件 一个 解析 轻量级 ini
2023-09-14 09:01:04 时间
ini文件是一种常见的配置文件。它以简单的文字与简单的结构组成.INI文件会以不同的扩展名,如 .ini. , .cfg , .conf 等。
INI文件的格式
INI文件由3个重要的部分组成:参数(parameters),段(sections)和注释(comments).其格式如下:
段(sectio
ini文件是一种常见的配置文件。它以简单的文字与简单的结构组成.INI文件会以不同的扩展名,如".ini.",".cfg",".conf"等。 INI文件的格式 INI文件由3个重要的部分组成:参数(parameters),段(sections)和注释(comments).其格式如下: 段(sections)
[section] 参数(parameters)
name=value 注释(comments)
;comments
每个段包括段名,注释,和一定的参数对,段名不可重复。段内的参数对是有序的,可重复的。
注释一般以分号“;”开头,在分号后面的文字,直到该行结尾都全部为注解。但是也有很多的配置文件的注释是以“#”开头的。 一般来说,段与段直接的名字是不能重复的。而段内的参数对是有序的,可重复的。虽然这种重复参数的情况比较少,但是有些地方还是会用到的。如OceanBase数据库的 Schema配置文件如下。
完整的解析至少要包括以下功能:
获取section段第一个键为key的值,并将值赋到value中
int getValue(const string section,const string key,string value);
获取section段第一个键为key的值,并将值赋到value中,将注释赋到comment中
int getValue(const string section,const string key,string value,string comment);
获取section段所有键为key的值,并将值赋到values的vector中
int getValues(const string section,const string key,vector string values);
获取section段所有键为key的值,并将值赋到values的vector中,将注释赋到comments的vector中
int getValues(const string section,const string key,vector string value,vector string comments);
获取section段的注释
int getSectionComment(const string section,string comment);
如果要在程序中修改INI文件设置的值,并将修改后的内容保存到原来的INI文件或者其他文件,则需要包括以下功能: 将内容保存到当前文件
int save();
同时设置值和注释
int setValue(const string section,const string key,const string value,const string comment=""); 删除段
void deleteSection(const string section); 删除特定段的特定参数
void deleteKey(const string section,const string key); 设置section段的注释
int setSectionComment(const string section,const string comment);
IniFile库既包含了INI文件的解析,也能够修改并保存INI文件。
解析过程中如果INI文件中没有指定段名,则会指定一个空字符串作为段名,段采用map保存,而段中的参数则采用vector保存,因此支持参数名重复。 IniFile除了适合用在一般后台程序读取配置文件,也能够帮助GUI界面程序提供参数配置,修改,保存等。 IniFile的使用 使用很简单 生成一个ini文件test.ini
cat test.ini
PHP导出MYSQL数据库并压缩 PHP可以一键导出MYSQL备份文件,并压缩存放,尽管phpMyAdmin有这功能,不过若你自己开发网站或者是为别人写CMS,你不应该要求别人用你程序的时候再去另外用phpMyAdmin备份MYSQL
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文件中去。完整的解析至少要包括以下功能:
获取section段第一个键为key的值,并将值赋到value中
int getValue(const string section,const string key,string value);
获取section段第一个键为key的值,并将值赋到value中,将注释赋到comment中
int getValue(const string section,const string key,string value,string comment);
获取section段所有键为key的值,并将值赋到values的vector中
int getValues(const string section,const string key,vector string values);
获取section段所有键为key的值,并将值赋到values的vector中,将注释赋到comments的vector中
int getValues(const string section,const string key,vector string value,vector string comments);
获取section段的注释
int getSectionComment(const string section,string comment);
如果要在程序中修改INI文件设置的值,并将修改后的内容保存到原来的INI文件或者其他文件,则需要包括以下功能: 将内容保存到当前文件
int save();
同时设置值和注释
int setValue(const string section,const string key,const string value,const string comment=""); 删除段
void deleteSection(const string section); 删除特定段的特定参数
void deleteKey(const string section,const string key); 设置section段的注释
int setSectionComment(const string section,const string comment);
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();
PHP导出MYSQL数据库并压缩 PHP可以一键导出MYSQL备份文件,并压缩存放,尽管phpMyAdmin有这功能,不过若你自己开发网站或者是为别人写CMS,你不应该要求别人用你程序的时候再去另外用phpMyAdmin备份MYSQL
相关文章
- 微信Windows端IM消息数据库的优化实践:查询慢、体积大、文件损坏等
- python文件操作步骤_python读取csv文件
- 【说站】图片去水印神器Inpaint单文件版v9.2.0
- 灵魂一问:一个Java文件的执行全部过程你确定都清楚吗?
- ExcelVBA一键汇总多文件的指定工作表的到一个文件
- VBA汇总一个文件多工作表到一个表
- python写文件追加 按行追加_python 追加写入
- 用python删除文件_python运行另一个py文件
- 干货分享|袋鼠云数栈离线开发平台在小文件治理上的探索实践之路
- PHP file_get_contents():将文件读入一个字符串
- Linux下复制文件的正确姿势(linux复制文件到另一个文件夹)
- 文件Linux查找不存在文件的方法(linux判断不存在)
- 如何在Linux上执行pl文件(linux执行pl文件)
- Linux查看文件句柄数:一个指南(linux查看文件句柄数)
- BootISO:从 ISO 文件中创建一个可启动的 USB 设备
- 如何在Linux中查找一个文件
- Linux清空文件:快速解决方案(linux清空一个文件)
- 文件Linux解压zip文件的简单步骤(linux怎么解压zip)
- 文件转移Linux下使用mv实现快速文件转移(linuxmv实现)
- 如何将CVS文件导入MySQL数据库(cvs怎么导入mysql)
- 探索Redis从文件中寻找答案(查找redis文件)