在Lua中解析文件的最有效方法

时间:2014-07-29 23:26:36

标签: performance optimization lua

我试图弄清楚使用Lua从文件中解析数据的最有效方法是什么。例如,假设我有一个类似这样的文件(example.txt):

0, Data
74, Instance
4294967295, User
255, Time

如果我只想要"之前的数字,"我想到了几种获取信息的方法。我首先使用f = io.open(example.txt)获取数据,然后使用for循环来解析f的每一行。这导致了我的问题的核心。最有效的方法是什么?

在for循环中,我可以使用这些方法中的任何一个来获取逗号之前的#:

line.find(regex)
line:gmatch(regex)
line:match(regex)

或Lua' split function

有没有人为这些/其他方法运行速度测试,他们可以指出这是快速解析的方法?如果你能说出解析小文件和大文件的速度,那么奖励积分。

1 个答案:

答案 0 :(得分:2)

您可能想要使用line:match("%d+")

line:find也会起作用,但返回的比你想要的要多。

line:gmatch不是您所需要的,因为它旨在匹配字符串中的多个项目,而不仅仅是一个项目,并且意味着在循环中使用。

至于速度,您必须自己进行测量。从下面的简单代码开始:

for line in io.lines("example.txt") do
  local x=line:match("%d+")
  if x~=nil then print(x) end
end