【问题标题】:Most efficient way to parse a file in Lua在 Lua 中解析文件的最有效方法
【发布时间】:2014-07-29 23:26:36
【问题描述】:

我正在尝试找出使用 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

有没有人对这些/其他方法进行速度测试,他们可以指出它们是快速解析的方法?如果您能说出解析小文件和大文件的速度,则可以加分。

【问题讨论】:

  • 请不要混淆LuaLUA。两种语言是不同的。 “Lua”是一个名字,在葡萄牙语中的意思是“月亮”。请不要把它写成“LUA”,这样既丑陋又令人困惑,因为那样它就变成了different meanings的缩写,代表不同的人。
  • 我怀疑所有这些都会获得相似的性能(在这种情况下,只需使用对您来说更简单/更清晰的东西)。文件 IO 和从硬盘读取的成本可能会使您对这些行执行的简单 O(N) 处理相形见绌。

标签: performance optimization lua


【解决方案1】:

您可能想使用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

【讨论】:

  • 感谢您的回答,正如我所提到的,我熟悉如何使用 match,但它正在运行我不知道如何执行的速度测试,所以这并不能完全回答我的问题。感谢您的意见!
猜你喜欢
  • 2012-05-28
  • 2010-10-11
  • 1970-01-01
  • 2018-12-31
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
相关资源
最近更新 更多