Lua io.lines()

前言#

從文章的題目可以看出,今天的內容是和文件的行相關的,其實這個函可以看成是一個文件讀取函數,只不過文件讀取的形式固定了,就是只能一行一行的讀,接下來我們就一起來看看這個函數究竟要怎么使用。

內容#


iolines()##

  • 原型:io.lines ([filename])
  • 解釋:按文件名以讀的模式打開一個文件,并且返回一個迭代函數,這個迭代函數每一次被調用都會返回文件中新的一行的內容,直到文件中所有的內容都被讀完,常用的代碼形式為for line in io.lines(filename) do body end,當迭代函數檢測到文件末尾時,它會返回nil來結束循環并自動關閉文件,這個函數還有另一種表現形式,那就是file:lines(),如果我們不加文件名的話,像這樣io.lines()的函數等價于io.input():lines()

Usage##

  • 首先我們新建一個文件,將文件命名為linestest.lua然后編寫如下代碼:
local contentfunc = io.lines("linestest.txt")
print("contentfunc is :")
print(contentfunc)

print("\nfirst file content is :")

-- 先手動調用一次
local content = contentfunc()
print(content.."\n")

-- 再手動調用一次
local content = contentfunc()
print(content.."\n")

-- 迭代調用
for cnt in contentfunc do
    print(cnt)
end

-- 直接全部迭代調用
print("\nsecond file content is :")
for cnt in io.lines("linestest.txt") do
    print(cnt)
end

-- 使用文件描述符迭代
print("\nthird file content is :")
local myfile = io.open("linestest.txt");
for cnt in myfile:lines() do
    print(cnt)
end

myfile:close()
  • 運行結果
io_lines.png

總結#

  • 使用這個函數最重要的一點就是記住這個函數的返回類型,他返回的內容還是一個函數,并且每一次調用這個迭代函數都能取得新一行的值,這個是不是和我們之前講的閉合函數很相似,有興趣的可以再看一下這篇文章Lua closure.
  • 注意函數io.lines(filename)file:lines()的使用有什么不同,實際上后者在函數調用完之后并不會自動關閉文件,代碼最后myfie:close()函數的調用沒有報錯,也說明了這個問題。
  • 由于這個函數是以讀的模式打開文件的,所以要求文件必須存在,否則就會報錯,所有在使用之前最好先檢查一下文件是否存在。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,537評論 0 17
  • 第一篇 語言 第0章 序言 Lua僅讓你用少量的代碼解決關鍵問題。 Lua所提供的機制是C不擅長的:高級語言,動態...
    testfor閱讀 2,725評論 1 7
  • Nginx API for Lua Introduction ngx.arg ngx.var.VARIABLE C...
    吃瓜的東閱讀 5,876評論 0 5
  • I/O 庫提供了兩套不同風格的文件處理接口。 第一種風格使用隱式的文件句柄; 它提供設置默認輸入文件及默認輸出文件...
    chiguozi閱讀 6,672評論 1 4
  • 如果能夠用很短的時間,就寫出一篇高質量的文章,豈不是......不用多久,我就會升職加薪,當上總經理,出任CEO,...
    悠然遇見南山閱讀 3,292評論 4 7