Работа с файлами в Lua (Basic)

Lua имеет множество встроенных функций для обработки этого с помощью библиотеки ввода-вывода. Библиотека ввода-вывода работает как с текстовыми, так и с двоичными файлами. Lua-агностик Unicode. Это означает, что все строки эффективно обрабатываются как двоичные данные, а не как какой-либо вид кодирования. Из-за этого вам редко нужно использовать библиотеку Unicode, за исключением более конкретных случаев использования.

Открыть и закрыть

Прежде чем мы приступим к чтению или письму, нам нужно обсудить открытие и закрытие файлов. Ваш рабочий процесс обычно включает в себя открытие файла, выполнение с ним каких-либо действий, а затем явное его закрытие. Когда вы выходите из программы, файл также должен закрыться, но это считается плохой практикой.

Чтобы открыть файл:

io.open( [имя файла] [, [режим]] )

Имя файла находится там, где находится файл, а режим указан в таблице ниже (или после того же режима, что и в C для fopen). Если нет режима, подразумевается r.

r(По умолчанию) Откроется файл только для чтения.

 

wОткроется файл для записи. Перезаписывает содержимое или создает новый файл.

 

aДобавить файл. Напишите до конца или создайте новый файл. Операции репозиции игнорируются.

 

r+Откроется файл в режиме чтения и записи. Файл должен существовать.

 

w++ Откроется файл для записи. Очищает существующее содержимое или создает новый файл.
a+Добавится файл в режим чтения. Напишите до конца или создайте новый файл. Операции перемещения влияют на режим чтения.

 

Вы также можете использовать модификатор b в конце режима, чтобы открыть файл в двоичном режиме. Например:

io.open( [файл], «r+b» )

io.open возвращает объект дескриптора файла. При работе с открывающимися файлами вы должны назначить дескриптор файла переменной, чтобы сделать что-нибудь полезное.

localfilehandle = io.open( «mycontents.txt», «рб» )

Как только вы закончите с файлом, вам нужно его закрыть.

localfilehandle = io.open( «mycontents.txt», «рб» )

filehandle:close()

Чтение файлов

Как только вы откроете свой файл, вы сможете его прочитать. Чтение осуществляется через:

filehandle:read( «[option]» [or: [number]] )

Параметры соответствуют следующей таблице для Lua 5.1 и 5.2:

*line*lСчитывает одну строку из файла.

 

*all*aСчитывает все содержимое из файла.
*number*nСчитывает номер из файла. Это читается до конца допустимой последовательности.

 

[number](integer)Считывает [количество] символов (байт) из файла. Не использует кавычки.

 

Lua 5.3 добавляет следующее (но имеет обратную совместимость):

aСчитывает все содержимое из файла.

 

lСчитывает одну строку из файла.
LСчитывает одну строку из файла, но сохраняет символ конца строки(ы)

 

nСчитывает номер из файла. Это читается до конца допустимой последовательности.

 

[number]Считывает [number] символы (байты) из файла. Не использует кавычки.

 

В основном все они возвращают ноль, если нет допустимой последовательности, за исключением параметров “все”, которые возвращают пустую строку до тех пор, пока файл действителен. Давайте посмотрим все это в действии с помощью test.txt:

123
line 2
123456789

(Обратите внимание на новую строку в конце test.txt)

Давайте попробуем каждый из наших вариантов для чтения и посмотрим, что мы получим. Мы собираемся начать весь файл снова и снова, чтобы избежать каких-либо проблем.

#!/usr/bin/lua5.1

local file = io.open( «test.txt», «р» )

localcontens= файл:read( «*all» )
print(contens )

file:close()

На выходе у нас получается:

./file1.lua
123
строка 2
123456789

Давайте разберем все наши варианты вместе теперь, когда мы увидели основную структуру:

#!/usr/bin/lua5.1

print( «*all» )
local file= io.open( «test.txt», «р» )
localcontens= file:read( «*all» )
print(contens )
file:close()

print()
print( «*строка» )
local file = io.open( «test.txt», «р» )
local contents = file:read( «*line» )
print( contents )
file:close()

print ()
print( «*number» )
local file= io.open( «test.txt», «р» )
local contents = file:read( «*number» )
print(contents )
file:close()

print()
print( «6» )
local file= io.open( «test.txt», «р» )
local contents = file:read( 6 )
print(contents )
file:close()

На выходе у нас получается:

./file1.lua
*all
123
строка 2
123456789

*line
123

*number
123

6
123
li

Давайте сделаем то же самое с Lua 5.3:

#!/usr/bin/lua5.3

print( «a» )
local file= io.open( «test.txt», «р» )
local contents = file:read( «a» )
print( contents )
file:close()

print ()
print( «l» )
local file= io.open( «test.txt», «р» )
local contents= файл:read( «l» )
print(contents )
file:close()

print ()
print( «L» )
local file= io.open( «test.txt», «р» )
local contents= файл:read( «L» )
print (contents )
file:close()

print()
print( «n» )
local file= io.open( «test.txt», «р» )
local contents = file:read( «n» )
print (contents )
file:close()

print()
print( «6» )
local file= io.open( «test.txt», «р» )
local contents= file:read( 6 )
print (contents )
file:close()

И мы получаем:

./file1.lua
a
123
строка 2
123456789

l 123

L 123

 

n 123

6
123
li

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *