第一版是为 Lua 5.0 编写的。虽然对于后续版本来说仍然基本适用,但有一些不同之处。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还可以帮助支持 Lua 项目。
用 Lua 编程 | ||
第 3 部分。标准库 第 21 章。I/O 库 |
通常,在 Lua 中,一次性读取整个文件比逐行读取要快得多。但是,有时我们必须面对一些大文件(比如几十或几百兆字节),一次性读取所有内容是不合理的。如果您想以最高性能处理如此大的文件,最快的办法是将它们分成相当大的块(例如,每个 8 KB)进行读取。为了避免在中间断行的问题,您只需要求读取一个块加上一行
local lines, rest = f:read(BUFSIZE, "*line")变量
rest
将获取被块中断的任何行的其余部分。然后,我们将块和这行剩余部分连接起来。这样,生成的块将始终在行边界处中断。
该技术的典型示例是这个 wc
实现,这是一个用于统计文件中字符、单词和行数的程序
local BUFSIZE = 2^13 -- 8K local f = io.input(arg[1]) -- open input file local cc, lc, wc = 0, 0, 0 -- char, line, and word counts while true do local lines, rest = f:read(BUFSIZE, "*line") if not lines then break end if rest then lines = lines .. rest .. '\n' end cc = cc + string.len(lines) -- count words in the chunk local _,t = string.gsub(lines, "%S+", "") wc = wc + t -- count newlines in the chunk _,t = string.gsub(lines, "\n", "\n") lc = lc + t end print(lc, wc, cc)
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |