lua io庫 輸入輸出

2021-08-19 20:33:58 字數 2699 閱讀 2653

lua io庫提供了2種模式來檔案處理

1.簡單模式-所有操作會在2個當前檔案(預設為標準輸入stdin,標準輸出stdout)

2.完全模式-基於檔案控制代碼,功能豐富一點

--接收任意個引數,預設寫到標準輸出stdout

io.write('www', '.','freecls','.','com','\n')

--預設從stdin讀取

local t = io.read('*n')

--'*a' 讀取整個檔案

--'*l' 讀取下一行(不包括換行符)=io.read()

--'*l' 讀取下一行(包括換行符)

--'*n' 讀取乙個數字(非數字開頭返回nil,數字開頭直到讀到非數字)

--num 讀取num個字元

--返回空字元代表還沒到檔案末尾,返回nil代表已到檔案末尾

io.read(0)

io.input---io.input ([file])

--開啟並設定為預設的讀取檔案

--如果提供的是handler,則直接設定

--如果沒提供引數,返回預設讀取檔案

[io.output]---io.output ([file])

--開啟並設定預設的輸出檔案

--其他同上

--小技巧

local tmp = io.input() --儲存當前的輸入檔案控制代碼

io.input('tmp.txt') --開啟新檔案並設定為當前檔案控制代碼

--do something

io.input():close() --關閉檔案

io.input(tmp) --恢復

--迭代一行一行讀取整個檔案

io.lines()

--例子

local lines = {}

for line in io.lines() do lines[#lines + 1] = line end

--排序

table.sort(lines)

--重新寫入

for _, l in ipairs(lines) do io.write(l, "\n") end

io.open--io.open(filename [,mode])

-- r 以唯讀方式開啟檔案,該檔案必須存在。

-- r+ 以可讀寫方式開啟檔案,其他的同上

-- w 開啟只寫檔案,內容清0,不存在建立

-- w+ 讀寫模式開啟,其他同上

-- a 追加只寫模式開啟,不存在則建立

-- a+ 追加讀寫模式開啟,其他同上

-- b 二進位制模式,如果檔案是二進位制檔案

-- + 表示對檔案既可以讀也可以寫

-- 以唯讀方式開啟檔案

local f = io.open("test.lua", "r+")

-- 讀取第一行

file:read()

-- 關閉開啟的檔案

file:close()

-- 寫入內容

file:write("--test")

--定位檔案游標(也就是設定從檔案的**讀取或寫入資料)

file:seek(whence, offset)

--"set": 從檔案頭開始

--"cur": 從當前位置開始[預設]

--"end": 從檔案尾開始

--offset:預設為0

file:seek() --返回當前位置

file:seek("set") --定位到檔案頭

file:seek("end") --定位到檔案尾

file:flush()

--重新整理緩衝區

--一般為了效能考慮,當向檔案寫入一段資料時,不會立刻寫入,而是先

--快取到記憶體緩衝區,然後當滿足某個條件或顯示呼叫file:flush()時

--才會立即把緩衝區的資料寫入檔案

file:setvbuf(mode[, size])

--設定緩衝模式

-- 'no' 不緩衝直接寫入(不推薦,除非在開發除錯階段)

-- 'full' 全緩衝,只有當緩衝區滿了的時候才會立即寫入

-- 'line' 行緩衝,遇到換行符的時候立即寫入

-- 當顯示呼叫file:flush()就會立即寫入

io.popen (prog [, mode])

執行乙個程式並返回檔案控制代碼來讀寫,mode預設為r

注意,這個方法不是每個作業系統都支援

本人的是centos7 64位可以用來執行shell命令

local h = io.popen('ls -al /')

local s = h:read("*a")

print(s)

io.type(obj)

用來檢測obj是否為合法的控制代碼,返回

'file' 代表開啟的檔案控制代碼

'closed file' 代表關閉的檔案控制代碼

'nil' 代表不是檔案控制代碼

io.tmpfile()

開啟乙個臨時檔案並返回控制代碼,程式結束的時候自動刪除

常用技巧 輸入輸出優化 輸入輸出外掛程式

我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...

流類庫與輸入 輸出

流類庫與輸入 輸出 11 1 什麼叫做流?流的提取和插入是指什麼?i o流在c 中起著怎樣的作用?解 流是一種抽象,它負責在資料的生產者和資料的消費者之間建立聯絡,並管理資料的流動,一般意義下的讀操作在流資料抽象中被稱為 從流中 提取,寫操作被稱為 向流中 插入。作業系統是將鍵盤 螢幕 印表機和通訊...

流類庫與輸入 輸出

引用自 i o流的概念 當程式與外界環境進行資訊交換時,存在著兩個物件,乙個是程式中的物件,另乙個是檔案物件,流是一種抽象,它負責在資料的生產者和資料的消費者之間建立連線,並管理資料的流動。程式建立乙個流物件,並指定這個流物件與某個檔案物件建立連線,程式操作流物件,流物件通過檔案系統對所連線的檔案物...