Lua数据文件
Posted 森明帮大于黑虎帮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua数据文件相关的知识,希望对你有一定的参考价值。
LUA
脚本语言之数据文件与持久化是本文要介绍的内容,当我们处理数据文件的,一般来说,写文件比读取文件内容来的容易。因为我们可以很好的控制文件的写操作,而从文件读取数据常常碰到不可预知的情况。
一个健壮的程序不仅应该可以读取存有正确格式的数据还应该能够处理坏文件(译者注:对数据内容和格式进行校验,对异常情况能够做出恰当处理)。正因为如此,实现一 个健壮的读取数据文件的程序是很困难的。
文件格式可以通过使用Lua
中的table构造器
来描述,我们只需要在写数据的稍微做一些做一点额外的工作,读取数据将变得容易很多。方法是:将我们的数据文件内容作为Lua
代码写到Lua
程序中去。通过使用table
构造器,这些存放在Lua
代码中的数据可以像其他普通的文件一样看起来引人注目。
为了更清楚地描述问题,下面我们看看例子。如果我们的数据是预先确定的格式,比如CSV(逗号分割值
),我们几乎没得选择。但是如果我们打算创建一个文件为了将来使用,除了CSV
,我们可以使用Lua
构造器来我们表述我们数据,这种情况下,我们将每一个数据记录描述为一个Lua
构造器。将下面的代码:
写成
记住Entry...与Entry(...)
等价,他是一个以表作为唯一参数的函数调用。所以,前面那段数据在Lua
程序中表示如上。如果要读取这个段数据,我们只需要运行我们的Lua
代码。例如下面这段代码计算数据文件中记录数:
输出结果:
注意,在这些程序段中使用事件驱动的方法:Entry函数作为回调函数,dofile
处理数据文件中的每一记录都回调用它。当数据文件的大小不是太大的情况下,我们可以使用name-value对来描述数据:
(如果这种格式让你想起BibTeX,这并不奇怪。Lua中构造器正是根据来自BibTeX的灵感实现的)这种格式我们称之为自描述数据格式,因为每一个数据段都根据他的意思简短的描述为一种数据格式。相对CSV和其他紧缩格式,自描述数据格式更容易阅读和理解,当需要修改的时候可以容易的手工编辑,而且不需要改动数据文件。例如,如果我们想增加一个域,只需要对读取程序稍作修改即可,当指定的域不存在时,也可以赋予默认值。使用name-value
对描述的情况下,上面收集作者名的代码可以改写为:
现在,记录域的顺序无关紧要了,甚至某些记录即使不存在author这个域,我们也只需要稍微改动一下代码即可:
Lua
不仅运行速度快,编译速度也快。例如,上面这段搜集作者名的代码处理一个2MB的数据文件时间不会超过1秒。另外,这不是偶然的,数据描述是Lua
的主要应用之一,从Lua
发明以来,我们花了很多心血使他能够更快的编译和运行大的chunks
。
以上是关于Lua数据文件的主要内容,如果未能解决你的问题,请参考以下文章