Lua讀寫文件


文件讀寫

文件讀寫對制作游戲很有幫助。可以調用別的文件中的代碼,保存最高分、游戲存檔、玩家狀態等信寫到文件中。

首先,讓我們看一個簡單的命令:dofile。這個命令會讀入另一個文件的代碼並立即執行。

代碼:

dofile("./test.lua")

很簡單的命令。注意 ./ 是指根目錄,不是子目錄。如果是子目錄,應該這樣用:

代碼:

dofile("./files/test.lua")

  那么,如果我們的文件 test.lua 包含下述代碼:

代碼:

playerx = 10 playery = 20 enemyx = 40 enemyy = 50

  一旦我們用 dofile 調用這個文件,這些變量將立即得到聲明。文件不是非得用 lua 后綴,txt 或其他后綴都可以。

從文件中讀取一行:

  假設你有一個很多行文本的文件,你想從中讀取一行,並打印到屏幕上。為此我們可以使用 io.open() 命令打開文件並讀取。

  命令的語法是 io.open(filename, mode)。此處我們將使用 r 作為 mode 的值,意指讀取(read)模式。作為參考,下面是所有可用模式的列表:

引用:

r - 讀取模式w - 寫入模式(覆蓋現有內容)

a - 附加模式(附加在現有內容之后)

b - 二進制模式

r+ - 讀取更新模式(現有數據保留)

w+ - 寫入更新模式(現有數據擦除)

a+ - 附加更新模式(現有數據保留,只在文件末尾附加)

第一件要做的事情就是打開文件並存為一個變量。看下面。

代碼:

file = io.open("testRead.txt", "r")

  現在我們的文件 testRead.txt 已打開並處於讀取模式。接着我們使用 read() 命令讀取文件中的單行內容存為另一個變量。

代碼:

ourline = file:read()

  這將讀取我們的文本文件的第一行。下一次我們使用 read() 命令它將讀取第二行。再下一次它會讀取第三行,依此類推。

  請注意,此命令前的 file 是我們之前打開文件並保存的變量名,你可以使用任何其他名字。file.read() 還可以使用下列任一個參數,只要用引號括起來放入括號里就可以。

引用:

*n - 讀取一個數字並返回它。例:file.read("*n")

*a - 從當前位置讀取整個文件。例:file.read("*a")

*l - (默認) - 讀取下一行,在文件尾 (EOF) 處返回 nil。例:file.read("*l")

number - 返回一個指定字符個數的字符串,或在 EOF 時返回 nil。例:file.read(5)

既然我們已經讀取到所要的那一行,我們需要關閉打開的文件,像這樣:

代碼:

file:close()

  現在要打印我們的文件至屏幕我們只要這么做:

代碼:

screen:print(10,10,ourline,white)

讀取所有行  

要讀取一個文件的所有行,你可以在一個 for 語句中使用上述技巧。請看下述代碼:

代碼:

y = 10

file = io.open("testRead.txt","r")

for line in file:lines() do

     y = y + 10

     screen:print(100,y,line,white)

endf

ile:close()

  這個代碼設置了一個起始值 y 用於打印,這樣它可以在屏幕不同的縱坐標打印每一行。照例,先打開文件。然后是 for 語句,這句代碼是說文件的行數有多少下面的代碼就執行幾次。我們的 y 坐標則每次循環加上 10 以便打印命令可以打印下一行。

寫入文件(覆蓋)

  寫入文件的方式大致相同。下面的代碼將覆蓋任何先前寫入文件的內容:

代碼:

file = io.open("testRead.txt","w")file:write("hello")file:close()

  注意,我們這次使用了 w 模式,而不是 r 模式,因為我們是要寫入而不是讀取。我們用 file:write() 寫入括號里作為參數的、用引號括起來的文本。你也可以用變量替代。如果你使用變量就不要用引號,請看下例:

代碼:

file = io.open("testRead.txt","w")myText = "Hello"file:write(myText)file:close()

寫入文件(附加)

  你可以使用附加模式,這樣就可以在寫入文件時將新內容附加在已有文本末尾,而不是刪除原來的。做法與上面基本相同,除了模式換成“附加”之外。請看代碼:

代碼:

file = io.open("testRead.txt","a")myText = "\nHello"file:write(myText)file:close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM