admin 管理员组

文章数量: 1184232


2024年4月16日发(作者:phonegap原理)

libconfig手册

翻译自libconfig英文版手册部分内容——倪里特

1、 配置文件

libconfig支持结构化、层次化的配置。这些配置可以从文件中读取或写入文件,也可以

在内存中操作。

一个配置由一组setting构成,setting由名字(name)关联,并有相应的值(value)。

一个值(value)可以是以下任意一种类型:

标量值(scalar value):整型、64位整型、浮点数、布尔值或者字符串

数组(array):一组标量值的序列,所有的标量值必须为同一类型

群组(group):多个setting的集合

列表(list):一组值(value)的序列,各个值可(value)以分别为不同的类型,其他

的列表也可以包含其中。

观察下面这一个层次化GUI应用程序的配置文件,它阐明了一个配置文件语法所有的元素。

#Exampleapplicationconfigurationfile

version="1.0";

application:

{

window:

{

};

list=(("abc",123,true),1.234,(/*anemptylist*/));

books=(

{

},

{

}

title="SnowCrash";

author="NealStephenson";

price=9.99;

qty=8;

title="TreasureIsland";

author="RobertLouisStevenson";

price=29.95;

qty=5;

title="MyApplication";

size={w=640;h=480;};

pos={x=350;y=250;};

);

};

misc:

{

};

pi=3.141592654;

bigint=9223372L;

columns=["LastName","FirstName","MI"];

bitmask=0x1FC3;

包含在配置中的某个setting可以用path来唯一定义,path用点号分隔连接多个名字

(name),由最顶层的群组(group)开始,到setting自身结束。path中的每个名字都

是一个setting的名字;如果这个setting没有名字,那是因为它是数组(array)或

列表(list)中的一个元素。用方括号包含一个整型索引值可以用来表示它的名字。

举个例子,在上面这个多层的配置文件中,名为x的setting,指向它的path就是

.x;名为version的setting,指向它的path就是很简

单的version;指向book列表中第2个book,名为title的setting,指向它的path

就是.[1].title。

一个值(value)的数据类型由它本身的格式所决定。

如果一个值用双引号围住,那它被认为是一个字符串;

如果它看起来是一个整型或浮点数,那它就被认为是整型或浮点数;

如果它是TRUE、FALSE、true、false中的某个,那它就被认为是布尔值(TRUE、

FALSE大小写不敏感,比如tRuE或fALse也被看作为TRUE或FALSE);

如果在方括号中包含了多个逗号分隔的值,那它就被认为是数组;

如果在圆括号中包含了多个逗号分隔的值,那它就被认为是列表;

任何值如果不符合上述的标准,则会被认为是无效并且产生一个分析错误。

所有的名字(name)都是大小写敏感的,并且只能由数字字母、横杠(-),下横杠(_)

和星号(*)组成,而且必须以字母或星号开头。其他字符都是非法的。

在C和C++中,整型、64位整型、浮点数和字符串分别被映射为int、long long、

double和const char *。布尔型在C中被映射为int,在C++中被映射为bool。

下面的章节会从更多的细节方面描述配置文件语法的各个元素。

1.1、 setting

一个setting的格式如下:

name = value;

或者

name : value;

结尾的分号是必须要有的,空白字符会被忽略;

value可以是标量值、数组、群组或者列表。

1.2、 群组(group)

一个群组的格式如下:

{setting1, setting2, …}

一个群组可以包含任意个setting,但是在群组中,每个setting的名字必须是唯一的。

1.3、 数组(array)

一个数组的格式如下:

[value, value, …]

一个数组可以有零个或者多个元素,但是每个元素都必须是相同类型的标量值。

1.4、 列表(list)

一个列表的格式如下:

(value, value, …)

一个列表可以有零个或者多个元素,而且每个元素可以分别是标量值、数组、群组或其他列

表。

1.5、 整型值

整型值(int)可以用两种方式表示:十进制数,由0-9组成,并且可以带+或-;十六进

制数,0x打头并且用十六进制数表示。

1.6、 64位整型值

64位整型值(long long)表示方法和整型值基本一致,但是需要在最后加上L来表明它

是一个64位整型值。比如0L表示一个64位的0值。

1.7、 浮点值

浮点值由一个十进制数,可以带正负符号,然后带上一个可选的指数。这个可选的指数又由

字母E或者e加上一个可选的正负符号再加上具体的数字。

1.8、 布尔值

布尔值的取值只能是true和false,包括另外大小写混合的写法,比如tRue或FaLSe。

1.9、 字符串

字符串是由双引号引起来的任意文本。字符串里的双引号由转义符”替代,其他的转义符

比如、f、r、n、t都可以被辨认,并且与通常的理解一致。

另外,转义符x也被支持。它后面必须跟上刚好两个十六进制数,用来表示8位的ASCII

值,比如xFF表示值为0xFF的ASCII码。

其他的转义符都不被支持。

相邻的两个字符串会被自动连接,就像C的编码规则一样。在把一个很长得字符串格式化

为很短的字符串的时候,就会很有用。比如,下面三种写法的字符串都是等价的。

"Thequickbrownfoxjumpedoverthelazydog."

"Thequickbrownfox"

"jumpedoverthelazydog."

"Thequick"/*注释*/"brownfox"//其他注释

"jumpedoverthelazydog."

1.10、 注释

在配置文件中允许三种类型的注释

脚本风格的注释:从#开始到行尾的内容都为注释。

C风格的注释:/* 和*/之间的内容,即使是跨行的,都被认为是注释。

C++风格的注释:从//开始到行尾的内容都被认为是注释。

如预料的一样,注释符在双引号字符串中出现,会被认为是字符串的文本而不是注释符。

在读取配置的时候,注释内容会被忽略,它们不会被认为是配置的一部分。因此,如果配置

回写到文件中,原配置文件中的一些注释会丢失。

1.11、 包含指令

一个配置文件可能包含了另外一个配置文件的内容,这时就要用到包含指令。这个指令产生

的效果就是在包含点内联了那个文件的内容。

一个包含指令必须出现在它所在的那一行中,格式如下:

@include “filename”

文件名中反斜杠和双引号必须用转义符和”来替代。

举例说明,观察下面两个配置文件

#file:

quote = "Criticismmaynotbeagreeable,butitisnecessary."

"Itfulfilsthesamefunctionaspaininthehuman"

"sattentiontoanunhealthystateof"

"things.n"

"t--WinstonChurchill";

#file:

info:{

};

name="WinstonChurchill";

@include""

country="UK";

包含文件最大只能嵌套10层,突破这个限制会产生一个分析错误。

与注释类似,包含指令也不是配置文件句法的一部分。包含指令在配置文件被分析之前就已

经被处理了。因此,当配置回写回文件的时候,包含指令不会被保留。目前还不支持让程序

把包含指令插入到配置文件中。

2、 API

见英文手册


本文标签: 包含 配置文件 注释