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()
相關文章
相關標籤/搜索