您的位置:首页 > 其它

IniParser+win7解析配置文件INI

2017-08-05 17:45 351 查看
最近做实验用到了ini配置文件,读取过程高端到我不太敢相信做实验的人自己会写一个用键值对来存取文件的库,后来一查原来Iniparser是一个比较通用的读取ini配置文件的库,看起来我还是知道的太少了....

首先,可以直接在网上下载IniParser的源文件http://ndevilla.free.fr/iniparser
编译的时候如果是Linux的话就直接make,如果windows只要把文件中对于#include
的引用注释即可直接使用。可以看到库非常简短,但是实现的功能真的是让我们这些天天在配置问题和中间文件格式中苦苦挣扎的图像狗感动到流泪啊~
【IniParser】

IniParser is a simple C library offering ini file parsing services.
The library is pretty small (less than 1500 lines of C) and robust,
and does not depend on any other external library to compile. It is
written in ANSI C and should compile on most platforms without
difficulty.

IniParser是一个解析ini文件的C函数库,它小而稳定,并且平台无关,用ANSI C编写。

【IniFile】

An ini file is an ASCII file describing simple parameters
(character strings, integers, floating-point values or booleans) in
an explicit format, easy to use and modify for users.

Ini文件是一个有特定格式和简单参数 (character
strings, integers, floating-point values or
booleans)的ASCII文件,非常易于用户创建和修改。
【Ini
File Format】

1.Ini文件通过Sections来分段,通过以下的格式来定义:
[Section
Name]

i.e. the
section name enclosed in square brackets, alone on a line. Sections
names are allowed to contain any character but square brackets or
linefeeds.(注意章节方括号自占一行并且里面的字符不能有方括号或者换行)
2. Ini文件的Section内部,变量通过如下的方式申明:
Key =
value :comment;
其中,key可以是任意字符串(可以包含空格),value在等号右边,其可以包含任意字符,它也可以通过双引号包含给出,
如果,如果当前value没有被双引号包含,那么解析出的value会包含从等号右边第一个到comment之前的最后一个字符。

Hello = "this is a long string value" ;
comment 

Hello = this is a long string value ; comment

Ps: 行尾的comment和分号是可选的,如果有comment,那么它就会从第一个符号到分号后的尽头来识别
3.
多行文本通过反斜杠来连接

Multiple = Line 1 \ 

 Line 2 \

  Line 3 \

  Line 4 ; comment
【Using IniParser】

使用时只要include"iniparser.h"即可。在识别的时候,comments会被解析器丢弃,section的内容被识
别,比如说下面的seciton:

[Section] Keyword = value ; comment

 会被转换为如下的键值对:

("section:keyword", "value")

功能

int 

iniparser_getnsec
(dictionary*
D)
 
在字典中的部分路段,获取数。 
void 

iniparser_getsecname
(dictionary*
D,int n)
 
得到N节在字典的名称。 
void 

iniparser_dump_ini
(dictionary*
D,file* F)
 
保存到一个可装载的ini文件的字典。 
void 

iniparser_dumpsection_ini
(dictionary*
D的char *,FILE * F)
 
字典第一个可装载的ini文件保存。 
void 

iniparser_dump
(dictionary*
D,file* F)
 
转储到一个打开的文件指针的字典。 
int 

iniparser_getsecnkeys
(dictionary*
D,CHAR *s)
 
获取的数字键在字典中的一个部分。 
char** 

iniparser_getseckeys
(dictionary*
D,CHAR *s)
 
获取的数字键在字典中的一个部分。 
char* 

iniparser_getstring
(dictionary*
D,const
char*key,char* DEF)
 
获取字符串相关的关键。 
int 

iniparser_getint
(dictionary*
D,const char*
key,int
NOTFOUND)
 
获取相关的一个关键的字符串转换为int。 
double 

iniparser_getdouble
(dictionary*
D,const
char*key,doubleNOTFOUND)
 
获取相关的一个关键的字符串,转换成一个双。 
Iint 

iniparser_getboolean
(dictionary*
D,const
char*key,int
NOTFOUND)
 
获取相关的一个关键的字符串,转换成一个布尔值。 
int 

iniparser_set
(dictionary*
ini,const char entry*,const char*
val)
 
设置在字典中的一个条目。 
void 

iniparser_unset
(dictionary* ini,const
char*entry)
 
在字典中删除条目。 
int 

iniparser_find_entry
(dictionary*
ini ,const char*entry)
 
找出一个给定的条目,如果存在一个字典。 
dictionary* 

iniparser_load
(const char*
ininame)
 
解析ini文件,并返回一个分配的字典对象。 
void 

iniparser_freedict
(dictionary*
D)
 
释放所有内存相关的一个ini字典。 
【example】
下面是一个官方给的例子,确实好用
 

#include 

#include 

#include 

#include

//#include 

#include "iniparser.h"

void create_example_ini_file(void);

int  parse_ini_file(char * ini_name);

int main(int argc, char * argv[])

{

    int     status ;

    if (argc<2) {

        create_example_ini_file();

        status = parse_ini_file("example.ini");

    } else {

        status = parse_ini_file(argv[1]);

    }

    return status ;

}

void create_example_ini_file(void)

{

    FILE    *   ini ;

    ini = fopen("example.ini", "w");

    fprintf(ini,

    "#\n"

    "# This is an example of ini file\n"

    "#\n"

    "\n"

    "[Pizza]\n"

    "\n"

    "Ham       = yes ;\n"

    "Mushrooms = TRUE ;\n"

    "Capres    = 0 ;\n"

    "Cheese    = Non ;\n"

    "\n"

    "\n"

    "[Wine]\n"

    "\n"

    "Grape     = Cabernet Sauvignon ;\n"

    "Year      = 1989 ;\n"

    "Country   = Spain ;\n"

    "Alcohol   = 12.5  ;\n"

    "\n");

    fclose(ini);

}

int parse_ini_file(char * ini_name)

{

    dictionary  *   ini ;

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: