Lua - Tệp I / O

Thư viện I / O được sử dụng để đọc và thao tác các tệp trong Lua. Có hai loại hoạt động tệp trong Lua cụ thể là bộ mô tả tệp ngầm định và bộ mô tả tệp rõ ràng.

Đối với các ví dụ sau, chúng tôi sẽ sử dụng tệp mẫu test.lua như hình dưới đây.

-- sample test.lua
-- sample2 test.lua

Một thao tác mở tệp đơn giản sử dụng câu lệnh sau.

file = io.open (filename [, mode])

Các chế độ tệp khác nhau được liệt kê trong bảng sau.

Sr.No. Chế độ & Mô tả
1

"r"

Chế độ chỉ đọc và là chế độ mặc định nơi tệp hiện có được mở.

2

"w"

Chế độ đã bật ghi ghi đè lên tệp hiện có hoặc tạo tệp mới.

3

"a"

Chế độ nối sẽ mở một tệp hiện có hoặc tạo một tệp mới để thêm vào.

4

"r+"

Chế độ đọc và ghi cho một tệp hiện có.

5

"w+"

Tất cả dữ liệu hiện có sẽ bị xóa nếu tệp tồn tại hoặc tệp mới được tạo với quyền đọc ghi.

6

"a+"

Chế độ nối có bật chế độ đọc để mở tệp hiện có hoặc tạo tệp mới.

Trình mô tả tệp ngầm định

Các bộ mô tả tệp ngầm định sử dụng các chế độ đầu vào / đầu ra tiêu chuẩn hoặc sử dụng một tệp đầu vào và đầu ra duy nhất. Dưới đây là một ví dụ về cách sử dụng bộ mô tả tệp ngầm định.

-- Opens a file in read
file = io.open("test.lua", "r")

-- sets the default input file as test.lua
io.input(file)

-- prints the first line of the file
print(io.read())

-- closes the open file
io.close(file)

-- Opens a file in append mode
file = io.open("test.lua", "a")

-- sets the default output file as test.lua
io.output(file)

-- appends a word test to the last line of the file
io.write("-- End of the test.lua file")

-- closes the open file
io.close(file)

Khi bạn chạy chương trình, bạn sẽ nhận được đầu ra của dòng đầu tiên của tệp test.lua. Đối với chương trình của chúng tôi, chúng tôi có kết quả sau.

-- Sample test.lua

Đây là dòng đầu tiên của câu lệnh trong tệp test.lua cho chúng tôi. Ngoài ra, dòng "- End of the test.lua file" sẽ được nối vào dòng cuối cùng của mã test.lua.

Trong ví dụ trên, bạn có thể thấy cách các bộ mô tả ngầm hoạt động với hệ thống tệp bằng các phương thức io. "X". Ví dụ trên sử dụng io.read () mà không có tham số tùy chọn. Tham số tùy chọn có thể là bất kỳ thông số nào sau đây.

Sr.No. Chế độ & Mô tả
1

"*n"

Đọc từ vị trí tệp hiện tại và trả về một số nếu tồn tại ở vị trí tệp hoặc trả về nil.

2

"*a"

Trả về tất cả nội dung của tệp từ vị trí tệp hiện tại.

3

"*l"

Đọc dòng từ vị trí tệp hiện tại và di chuyển vị trí tệp sang dòng tiếp theo.

4

number

Đọc số byte được chỉ định trong hàm.

Các phương thức I / O phổ biến khác bao gồm,

  • io.tmpfile() - Trả về một tệp tạm thời để đọc và ghi sẽ bị xóa sau khi chương trình thoát.

  • io.type(file) - Trả về tập tin, tập tin đóng hay nil dựa trên tập tin đầu vào.

  • io.flush() - Xóa bộ đệm đầu ra mặc định.

  • io.lines(optional file name)- Cung cấp một trình lặp vòng lặp chung cho vòng lặp lặp qua tệp và đóng tệp cuối cùng, trong trường hợp tên tệp được cung cấp hoặc tệp mặc định được sử dụng và không được đóng ở cuối vòng lặp.

Trình mô tả tệp rõ ràng

Chúng tôi thường sử dụng bộ mô tả tệp rõ ràng cho phép chúng tôi thao tác nhiều tệp cùng một lúc. Các hàm này khá giống với các bộ mô tả tệp ngầm định. Ở đây, chúng tôi sử dụng tệp: function_name thay vì io. functions_name. Dưới đây là ví dụ về phiên bản tệp của cùng một ví dụ về trình mô tả tệp ngầm định.

-- Opens a file in read mode
file = io.open("test.lua", "r")

-- prints the first line of the file
print(file:read())

-- closes the opened file
file:close()

-- Opens a file in append mode
file = io.open("test.lua", "a")

-- appends a word test to the last line of the file
file:write("--test")

-- closes the open file
file:close()

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như ví dụ về bộ mô tả ngầm định.

-- Sample test.lua

Tất cả các chế độ mở tệp và tham số để đọc cho các bộ mô tả bên ngoài giống như các bộ mô tả tệp ngầm định.

Các phương pháp tệp phổ biến khác bao gồm,

  • file:seek(optional whence, optional offset)- Tham số khice là "set", "cur" hoặc "end". Đặt con trỏ tệp mới với vị trí tệp được cập nhật từ đầu tệp. Các hiệu số được dựa trên 0 trong chức năng này. Độ lệch được đo từ đầu tệp nếu đối số đầu tiên là "set"; từ vị trí hiện tại trong tệp nếu nó là "cur"; hoặc từ cuối tệp nếu nó là "kết thúc". Các giá trị đối số mặc định là "cur" và 0, vì vậy vị trí tệp hiện tại có thể nhận được bằng cách gọi hàm này mà không có đối số.

  • file:flush() - Xóa bộ đệm đầu ra mặc định.

  • io.lines(optional file name)- Cung cấp một trình lặp vòng lặp chung cho vòng lặp lặp qua tệp và đóng tệp cuối cùng, trong trường hợp tên tệp được cung cấp hoặc tệp mặc định được sử dụng và không được đóng ở cuối vòng lặp.

Dưới đây là một ví dụ để sử dụng phương pháp tìm kiếm. Nó đặt con trỏ khỏi 25 vị trí trước khi kết thúc tệp. Chức năng đọc in phần còn lại của tệp từ vị trí tìm kiếm.

-- Opens a file in read
file = io.open("test.lua", "r")

file:seek("end",-25)
print(file:read("*a"))

-- closes the opened file
file:close()

Bạn sẽ nhận được một số đầu ra tương tự như sau.

sample2 test.lua
--test

Bạn có thể chơi xung quanh tất cả các chế độ và thông số khác nhau để biết toàn bộ khả năng hoạt động của tệp Lua.