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

Lua

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

Оцените статью
Образовательный портал WELCOME4U.RU
Добавить комментарий

Adblock
detector