tconf文件注释

作者:

Tconf文件

文章概述

这篇文章讲解了tconf文件注释的开发背景、遇到的问题以及解决方案。tconf是坦克网络技术制作的配置文件格式,是坦克系列软件必须支持的标准。tconf使用#号作为多语言符号的注释符号,支持多种语言符号的选择。注释在预处理阶段会被忽略,语法错误检测在预处理后面进行。为了解决注释错误的问题,可以使用积极型解决方法,保证注释绝对正确,或者使用传统块注释。tconf配置文件支持读写功能,但目前写入数据时无法保存注释,建议使用编辑器编辑保存。tconf配置文件可以作为应用程序的配置文件使用,注释不会影响配置,也可以作为应用程序的数据库使用,此时需要删除注释。如果需要注释,可以使用添加有名字的方式来解决。

关键要点

1.Tconf是坦克网络技术制作的配置文件格式,所有坦克系列软件必须支持该格式的配置文件。

2.多语言支持tconf配置文件的注释符号预采用是#,可以在同一行或多行中注释对象和属性。

3.tconf的注释会在预处理阶段被忽略掉,语法错误检测则在预处理后的阶段进行。

4.注释错误无法处理,建议使用传统块注释或人为保证注释绝对正确。

5.Tconf配置文件除了读的功能,还支持写的功能,但目前无法将注释一起写入文件。

介绍

这篇文章讲解tconf注释,重点讲解对象注释的开发背景,遇到问题,以及解决方案。tconf是坦克网络技术制作的配置文件格式,也是坦克系列软件必须实现的一个标准,即所有坦克系列软件必须支持tconf格式的配置文件。

多语言的支持

tconf配置文件的注释符号预采用是#(井号),为什么说是预采用,因为tconf的符号支持自定义符号,所以在设计的时候预定义了一些符号,这些符号放在配置文件的第一行,称为符号行。tconf的一个目标是支持多种语言符号的,同样的配置,有多种符号选择,举例:

姓名=甘耀通
姓名=“甘 耀 通”
姓名="甘 耀 通"

上面的例子第一行中间没用空格,没有必要加双引号。第二行中间有空格,所有必须加双引号,如果不加,则空格后面会成为另一个配置,这一行的双引号是中文的双引号。第三行是英文的双引号。

通过这个例子,应该可以知道多语言符号的优点。如果还不理解,我再举一个例子:

对象《 
    姓名=甘耀通 
》 
对象{ 
    姓名=甘耀通
} 

这两种符号都是符合tconf标准的。我为什么要这样设计,因为很多配置文件都是使用英文符号的,我们在中文环境下配置文件还的切换一次英文键盘,输入了符号还需要切换一次回到中文键盘。如果一个配置文件有20行配置,一个符号要切换两次(来回),20行配置就需要40次(假设没有快捷方式或麻烦,这是有可能的,比如Linux终端)。一个符号来回切换需要2秒钟,所以20行配置就需要80秒,如果不用切换就没有切换键盘的时间开销。

注释与查错

上面的内容讲解了多语言符号支持的好处,现在我继续与大家讨论注释问题。tconf的注释是在预处理阶段就会把注释忽略掉,而语法错误检测是在预处理后面的阶段进行检测。
这张图一定要在记住。

tconf注释处理过错

注释功能设计是非常靠近用户体验的,注释一行的例子是:

#姓名=甘耀通 

注释对象的高级例子是:

##对象《 
    姓名=甘耀通 
》 

上面注释对象的例子可以看见,这个对象有三行,如果是传统配置文件,必须把三行都注释掉,像这样子:

#对象《 
#    姓名=甘耀通 
#》 

或者添加闭合符号,像下面这样:

##对象《 
    姓名=甘耀通 
》## 

有的配置文件还不支持注释,比如json。

高级例子与传统例子两者的区别,就是符号多少与语意是否合理。从二者的区别来看,高级例子是比传统的更靠近用户体验。

出现问题

这就会出现一个问题,如果你注释错误了怎么办,从图一可以知道,注释错误无法处理,因为我设计解析器的时候,注释处理是在预处理阶段就会忽略掉,错误处理是在预处理后面的阶段处理的。

##对象《 
    姓名=甘耀通 
    拥有项目《 
        坦克ns,坦克网盘 
    》 
》 
公司名称=坦克网络技术 

上面这个注释可以正确注释掉对象。

##对象《 
    姓名=甘耀通 
    拥有项目《 
        坦克ns,坦克网盘 
    》 
公司名称=坦克网络技术 

而上面的对象注释字面上没有错误,它少了一个对象闭合符号,它会把公司名称也注释掉,这不是你最初想要的,你最初只想注释掉对象,保留公司名称。

解决方案

既然是注释掉的东西,就不会考虑它是否是错误还是对的了。

哪我们应该使用什么解决方法避免注释错误呢?

两种解决方法:

第一种:积极型解决方法,人为保证注释绝对正确。

##对象《 
    姓名=甘耀通 
    拥有项目《 
        坦克ns,坦克网盘 
    》 
》 
公司名称=坦克网络技术 

第二种:撒手型解决方法,直接使用传统块注释。

##对象《 
    姓名=甘耀通 
    拥有项目《 
        坦克ns,坦克网盘 
    》 
## 
公司名称=坦克网络技术 

上面这个注释,虽然你忘记写了一个对象闭合符号,但你确可以保证注释达到你的目的,保留了公司名称。

块注释常见问题

下面这个例子块注释出现问题:

## 
姓名=甘耀通 
年龄=20
性别=男
公司名称=坦克网络技术 

如果使用了块注释多行,你的意图是注释点前面3行,但忘记了写块注释结束符号,所以连公司名称也注释了。正确的写法应该像下面这样:

## 
姓名=甘耀通 
年龄=20
性别=男
##
公司名称=坦克网络技术 

只有这样使用块注释,才是正确的做法。

最后,这两种注释方法都比较合理,你钟意怎样用,都可以。

未来,希望设计出更好用户体验的tconf配置文件。

读与写的影响

tconf配置文件除了读的功能,还支持写的功能。但目前当我们写入数据的时候,是无法把注释也写到文件的。另一种情况是你打开一个配置文件,编辑了里面的数据,然后保存,那么,注释文本将会消失。如果希望保存注释的时候,最好采用编辑器编辑保存,而不是使用tconf包保存。

应用场景

tconf配置是默认支持中文的,未来会支持更多语言。目前tconf配置文件有两个应用场景:

第一种:作为应用程序的配置文件使用,这种场景下,注释不会有任何影响。因为配置是使用编辑器编辑保存的。

第二种:作为应用程序的数据库使用。这种场景下。tconf做为纯粹的存储数据的文件,所以,注释是需要删除的。但你在这种场景下使用的时候,需要下载tconf包,目前只支持go语言。如果你的确需要注释,可以采用添加有名字来解决。比如下面的例子:

对象《 
    姓名=甘耀通 
    注释=是 
    拥有项目《 
        坦克ns,坦克网盘 
    》 
 》 
公司名称=坦克网络技术 

这样一个简洁的配置文件出现了。你只需要判断对象的注释字来运行你接下来的代码了。