Lua中的輸入輸出與檔案操作

2021-09-12 19:56:52 字數 1945 閱讀 6377

lua語言追求的是可移植性和嵌入性,它本身並沒有提供太多與外部互動的機制。在真實的lua程式中,大多數io操作要麼由宿主程式實現,要麼通過外部庫實現,單就lua語言而言,它只提供了基本的檔案操作等簡單功能,在檔案操作上,它提供了兩種模型。

i/o中提供了乙個簡單模型,當前輸入流和當前輸出流,其i/o操作就是通過流來實現的。i/o庫把當前輸入流初始化為程序的標準輸入,把當前輸出流初始化為程序的標準輸出。

io.input和io.output可以用於改變當前的輸入流和輸出流,呼叫io.input(),它會以唯讀方式開啟乙個檔案,並將檔案內容設定為當前輸入流。

io.input("test.txt"),輸入檔名要麼是相對路徑,要麼是絕對路徑,在不知道相對路徑的情況下最好用絕對路徑;

io.read和io.write,函式io.read可以從當前流中讀取字串,其引數決定了要讀取的資料,它可以一次指定多個引數。

"a"    讀取整個檔案

"l" 讀取下一行(丟棄換行符)

"l" 讀取下一行(保留換,行符)

"n" 讀取乙個數值,如果當前流中的資料不是數值,則返回nil

num 以字串型別讀取num個字元,如果未讀到資料,返回nil

io.read(0)是乙個特例,它常用於測試是否到達了檔案的末尾,如果不是,則返回空字串,如果是末尾,則返回nil。雖然使用io.read(1)也能測試,但是這樣做會損失資料。 

io.write它可以讀取任意數量的字串並將其寫入當前輸出流,該函式可以使用多個引數,因此應該避免連線操作io.write(a..b..c),而是應該使用io.write(a,b,c)來代替。io.write允許對輸出進行重定向,而print只能進行標準輸出。

io.lines迭代器,用於逐行迭代乙個檔案,代替io.read("l"),下面是乙個對檔案進行排序的程式

--以唯讀模式開啟乙個檔案

io.input('data.txt')

local lines={}

--將各行資料讀入表中

for line in io.lines() do

lines[#lines+1]=line

end--對各行進行排序,按照字母表順序

table.sort(lines)

--for後面的下劃線用於補充程式,也可以使用乙個變數代替,儲存的是table中的數字索引

for _,m in ipairs(lines) do

io.write(m,"\n")

end

複雜的檔案操作需要用到完整i/o模型

io.open用於開啟乙個檔案,它有兩個引數,第乙個引數為檔名,第二個引數是乙個模式字串。"r"代表唯讀,"w"代表只寫,"a"代表追加,它的返回值為對應檔案的流,當發生錯誤時,該函式會在返回nil的同時返回一條錯誤資訊。

檢查錯誤的一種典型方法是使用asset。

local f=assert(io.open(filename,mode));
在開啟檔案後,可以使用方法read和write從流中讀取和向流中寫入,他們與函式read和write類似,但是需要使用冒號運算子將它們當做流物件的方法來呼叫,f:read()代表函式read用於讀取流f。

函式io.input和io.output允許混用簡單模型和完整模型,如下所示。

--呼叫無引數的io.input()可以獲取當前輸入流

local temp=io.input()

--開啟乙個新的當前輸入流

io.input("newinput")

--關閉當前流

io.input():close()

--恢復之前的輸入流

io.input(temp)

io.read(args)實際上是io.input():read(args)的縮寫,同理io.write()以及io.lines()都是簡寫。

python檔案操作與輸入輸出

1 input與raw input函式的使用 input會假設使用者輸入的是合法的python表示式,當不合法是會出現錯誤 這裡lan應該加引號,表示為乙個字串,否則就是乙個不合法的字元,如果用raw input就不會出現這樣的問題,因此應該盡可能的使用raw input 2 字串的格式化 格式化操...

python 檔案操作(輸入 輸出)

檔案物件不僅可以訪問普通的磁碟檔案,也可以訪問任何其他型別抽象層面的 檔案 檔案只是連續的位元組序列,資料的傳輸經常用到位元組流。file object open file name,access mode r buffering 1 buffering用於指示訪問檔案所採用的緩衝方式。其中0表示不...

檔案基本操作,輸入輸出

c語言 c語言檔案操作函式總覽 include 標頭檔案 file fopen const char filename,const char mode 開啟檔案 wb 檔案每次都覆蓋,開啟檔案的時候會先清空原來的內容 ab 檔案末尾追加寫入,不清空原來的內容 在 wb 模式下,fopen返回值為nu...