svlib(5) – ini文件操作

svlib支持了对ini文件操作的支持,包括读写ini

一、INI文件

INI文件是一个无固定标准格式的配置文件。它以简单的文字与简单的结构组成,常常使用在Windows操作系统,或是其他操作系统上,许多程序也会采用INI文件作为设置程序之用。Windows操作系统后来以注册表的形式替换掉INI文件。INI文件的命名来源,是取自英文“初始(Initial)”的首字缩写,正与它的用途——初始化程序相应。

格式:

节:

 [section]

参数:

  name=value

注解:

注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。

;comment text

以下是ini文件的例子:

; last modified 2001  by John
Doe

host=localhost

[owner]

name=John
Doe

organization=Acme
Widgets Inc.

[database]

; use IP address in case  network name resolution is
not working

server=192.0.2.62    

port=143

file="payroll.dat"

二、svlibINI文件支持

svlib实现了 cfgFileINI 类,实现对INI文件的读取和写入。实现了cfgNodeMap类,来存储INI文件的内容。

svlib中,是以节点(Node)为单位,来管理INI中的内容。如以上的INI文件,有3个节点,分别是hostownerdatabase。这个三个节点,就会存在cfgNodeMap中的cfgNode中。而owner,又包括两个节点,nameorganization。同理,database也是一样。

cfgNodeMap类中,有cfgNode value[string],哈希属组,来存储同一层次的各个节点。在这里就是,hostownerdatabase这三个节点。

clip_image002

   代码,这里就不分析了。底层原理,是从INI文件读取一行,然后进行正则匹配,判断之后,放入到DOM结构体中(cfgNodeMap)。

   然后在从DOM结构体中,将内容转化到自定义的数据结构中。

三、  例子

如对于以下的ini文件。

总共有三个节点,labelstu1stu2stu1stu2又分别有3个节点。

clip_image004

   自己定义两个类,分别表示这些节点。注意,这里变量的名字,要和INI文件中的参数名要一致。

clip_image006

   svlib中,提供了5个宏,来实现对节点的注册。

  • SVLIB_DOM_UTILS_BEGIN 表示注册开始,参数是类名

  • SVLIB_DOM_FIELF_OBJECT:  注册一个对象

  • SVLIB_DOM_FIELD_STRING:注册一个字符串

  • SVLIB_DOM_FIELD_INT   注册一个整数

  • SVLIB_DOM_FIELD_END   表示注册结束

   注册之后,就会在类中增加两个方法,

  • fromDom:  dom的内容,保存在类的变量中

  • toDom:    将类中的变量,保存在dom

   domdocument object model,是svlib中为了管理树形结构的任意自定义数据,所使用的一种机制。

   对于INI文件,svlib首先将INI文件内容,转换成dom结构,然后在将dom结构中的内容,转化到自定义的类中的变量中。

clip_image007

   读取INI文件,然后使用deserialize方法,将INI文件的内容,反序列化后,保存在dom结构中。

   调用类的fromDOM方法,将dom结构中的内容,转换到类中的变量中。最后访问类中的变量,就可以得到数据。

   执行结果:

clip_image009

四、svlib中的bug

   svlib提供的源代码,有一些bug存在,不能将INI中的整数,保存到类中的整数变量中,此时需要进行修改源代码,以支持读取整数。

   svlib_macros.svh代码中。将SVLIB_DOM_FIELD_INT宏的代码,改为以下代码,支持整数和16进制数据读取。

clip_image011

   另外SVLIB_DOM_UTILS_BEGIN宏,也有bug。对于函数__svlib_dom_superfunction__函数,要将参数的名字进行修改,原来的参数,都是没带下划线的,因此,如果INI文件中,如果有的节点名字,叫purposenamedom,那么就获取不到这些节点的值。所以要将参数名字进行修改。这里参数修改后,后面的宏中的参数,都要进行修改。

clip_image013

  至此,svlib的介绍,就到此结束了。

此条目发表在IC, 语言相关分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。