Lua - 檔案輸入/輸出:初學者指南

你好,未來的 Lua 程式設計師!今天,我們將踏上一段令人興奮的旅程,進入 Lua 的檔案輸入/輸出(I/O)世界。如果你從未編程過,別擔心——我將成為你的友好導遊,一步一步地解釋一切。所以,拿一杯你喜歡的飲料,我們一起來深入探討吧!

Lua - File I/O

什麼是檔案輸入/輸出?

在我們開始之前,讓我們先了解什麼是檔案輸入/輸出。簡單來說,它是我們的程式與計算機上的檔案互動的方式。我們可以從檔案中讀取數據(輸入)或將數據寫入檔案(輸出)。這就像與計算機的存儲進行對話一樣!

隱含檔案描述符

Lua 使用所謂的“隱含檔案描述符”使得檔案操作變得非常簡單。別讓這個花哨的術語嚇到你——它只是意味著 Lua 在幕後處理了一些細節,讓我們可以專注於重要的部分。

從檔案讀取

讓我們從讀取檔案開始。想像你有一個名為 "hello.txt" 的檔案,裡面的內容是 "Hello, Lua!"。

local content = io.read("*all")
print(content)

當你運行這段代碼時,它會在螢幕上打印 "Hello, Lua!"。神奇,對吧?這裡發生了什麼:

  • io.read("*all") 讀取檔案的全部內容。
  • 我們將這個內容存儲在 content 變量中。
  • 然後我們打印它。

寫入檔案

現在,讓我們試試寫入檔案:

io.write("Lua 是太棒了!")

這行代碼會將 "Lua 是太棒了!" 寫入一個檔案。但是等等,哪個檔案?默認情況下,Lua 會寫入到“標準輸出”,這通常是你的計算機螢幕。要寫入實際的檔案,我們需要使用 io.output()

io.output("output.txt")
io.write("Lua 是太棒了!")
io.close()

這裡的每一行代碼都做了什麼:

  1. io.output("output.txt") 告訴 Lua 寫入名為 "output.txt" 的檔案。
  2. io.write("Lua 是太棒了!") 將我們的訊息寫入檔案。
  3. io.close() 關閉檔案,這一步很重要,確保所有數據都被保存。

按行讀取

有時候,我們想按行讀取檔案。Lua 這方面做得非常簡單:

for line in io.lines("input.txt") do
print(line)
end

這段代碼會打印 "input.txt" 的每一行到螢幕上。這就像魔法一樣——Lua 自動打開檔案,按行讀取,讀完後關閉!

明確檔案描述符

現在,讓我們升級並討論“明確檔案描述符”。這給我們對檔案操作提供了更多的控制。

打開檔案

要顯式打開檔案,我們使用 io.open()

local file = io.open("data.txt", "r")
if file then
local content = file:read("*all")
print(content)
file:close()
else
print("無法打開檔案")
end

讓我們分解一下:

  1. io.open("data.txt", "r") 以讀模式("r")打開 "data.txt"。
  2. 我們檢查 file 是否存在(以防檔案無法打開)。
  3. 如果存在,我們使用 file:read("*all") 讀取它的所有內容。
  4. 我們打印內容並關閉檔案。
  5. 如果檔案無法打開,我們打印一條錯誤訊息。

使用明確描述符寫入

寫入的過程非常相似:

local file = io.open("output.txt", "w")
if file then
file:write("Lua 是太棒了!\n")
file:write("我愛編程!")
file:close()
else
print("無法打開檔案以進行寫入")
end

這段代碼以寫模式("w")打開 "output.txt",在其中寫入兩行文字,然後關閉檔案。

有用的檔案方法

這裡是一張一些便利的檔案方法表格,你可以使用:

方法 描述
file:read(...) 根據給定的格式從檔案讀取
file:write(...) 將字符串寫入檔案
file:lines() 返回一個迭代器以按行讀取檔案
file:seek(whence, offset) 設置讀/寫的檔案位置
file:flush() 將任何已寫入的數據保存到檔案
file:close() 關閉檔案

實際世界範例:一個簡單的筆記應用程序

讓我們把所有這些東西結合起來,創建一個簡單的筆記應用程序:

-- 添加筆記的函數
function add_note()
print("請輸入你的筆記:")
local note = io.read()
local file = io.open("notes.txt", "a")
if file then
file:write(note .. "\n")
file:close()
print("筆記添加成功!")
else
print("錯誤:無法打開檔案")
end
end

-- 讀取所有筆記的函數
function read_notes()
local file = io.open("notes.txt", "r")
if file then
print("你的筆記:")
for line in file:lines() do
print(line)
end
file:close()
else
print("找不到筆記或無法打開檔案")
end
end

-- 主程序循環
while true do
print("\n你想做什麼?")
print("1. 添加筆記")
print("2. 讀取筆記")
print("3. 離開")
local choice = io.read("*n")

if choice == 1 then
add_note()
elseif choice == 2 then
read_notes()
elseif choice == 3 then
print("再見!")
break
else
print("無效選擇。請重試。")
end
end

這個程序允許你將筆記添加到一個檔案中,並讀取回來。它使用了讀取和寫入操作,讓你體驗到檔案 I/O 在實際應用程序中的使用。

結論

恭喜你!你剛剛踏出了進入 Lua 檔案輸入/輸出世界的第一步。記住,熟能生巧,所以不要害怕嘗試這些概念。試著修改筆記應用程序,或者創建自己的使用文件操作的项目。

檔案 I/O 最初可能看起來有點令人生畏,但隨著時間的推移,你會發現它是一個非常強大的工具,可以添加到你的編程工具箱中。它讓你的程序能夠存儲和檢索數據,使它們變得更加有用和多用途。

持續編程,持續學習,最重要的是,玩得開心!編程的世界充滿了令人興奮的可能性,而你只是剛剛開始。祝你在 Lua 編程中快樂!

Credits: Image by storyset