第一版是針對 Lua 5.0 所撰寫的。雖然在很大程度上仍然適用於後續版本,但仍有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也同時協助支援 Lua 專案。
![]() |
用 Lua 程式設計 | ![]() |
第三部分。標準函式庫 第 21 章。I/O 函式庫 |
通常,在 Lua 中,一次讀取整個檔案比逐行讀取要快很多。不過,有時我們會遇到一些大檔案(例如,數十或數百 MB),一次讀取所有內容並不合理。如果您想要以最佳效能處理此類大檔案,最快的做法是將其讀取為合理大小的區塊(例如,每個 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。保留所有權利。 | ![]() |