Lua - Arquivo I / O

A biblioteca de E / S é usada para ler e manipular arquivos em Lua. Existem dois tipos de operações de arquivo em Lua, a saber, descritores de arquivo implícitos e descritores de arquivo explícitos.

Para os exemplos a seguir, usaremos um arquivo de amostra test.lua conforme mostrado abaixo.

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

Uma operação simples de abertura de arquivo usa a seguinte instrução.

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

Os vários modos de arquivo estão listados na tabela a seguir.

Sr. Não. Modo e descrição
1

"r"

O modo somente leitura é o modo padrão em que um arquivo existente é aberto.

2

"w"

Modo habilitado para gravação que sobrescreve o arquivo existente ou cria um novo arquivo.

3

"a"

Modo Anexar que abre um arquivo existente ou cria um novo arquivo para anexar.

4

"r+"

Modo de leitura e gravação para um arquivo existente.

5

"w+"

Todos os dados existentes são removidos se o arquivo existir ou se um novo arquivo for criado com permissões de leitura e gravação.

6

"a+"

Modo anexo com modo de leitura habilitado que abre um arquivo existente ou cria um novo arquivo.

Descritores de arquivo implícitos

Os descritores de arquivo implícitos usam os modos de entrada / saída padrão ou usam um único arquivo de entrada e saída. Um exemplo do uso de descritores de arquivo implícitos é mostrado abaixo.

-- 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)

Ao executar o programa, você obterá uma saída da primeira linha do arquivo test.lua. Para nosso programa, obtivemos a seguinte saída.

-- Sample test.lua

Esta foi a primeira linha da instrução no arquivo test.lua para nós. Além disso, a linha "- Fim do arquivo test.lua" seria anexada à última linha do código test.lua.

No exemplo acima, você pode ver como os descritores implícitos funcionam com o sistema de arquivos usando os métodos io. "X". O exemplo acima usa io.read () sem o parâmetro opcional. O parâmetro opcional pode ser qualquer um dos seguintes.

Sr. Não. Modo e descrição
1

"*n"

Lê a partir da posição atual do arquivo e retorna um número se existir na posição do arquivo ou retorna nulo.

2

"*a"

Retorna todo o conteúdo do arquivo da posição atual do arquivo.

3

"*l"

Lê a linha da posição atual do arquivo e move a posição do arquivo para a próxima linha.

4

number

Lê o número de bytes especificados na função.

Outros métodos de I / O comuns incluem,

  • io.tmpfile() - Retorna um arquivo temporário para leitura e gravação que será removido assim que o programa for encerrado.

  • io.type(file) - Retorna se arquivo, arquivo fechado ou nulo com base no arquivo de entrada.

  • io.flush() - Limpa o buffer de saída padrão.

  • io.lines(optional file name)- Fornece um iterador de loop for genérico que percorre o arquivo e fecha o arquivo no final, caso o nome do arquivo seja fornecido ou o arquivo padrão seja usado e não fechado no final do loop.

Descritores explícitos de arquivo

Freqüentemente, usamos um descritor de arquivo explícito, o que nos permite manipular vários arquivos ao mesmo tempo. Essas funções são bastante semelhantes aos descritores de arquivo implícitos. Aqui, usamos file: function_name em vez de io.function_name. O exemplo a seguir da versão do arquivo do mesmo exemplo de descritores de arquivo implícitos é mostrado abaixo.

-- 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()

Ao executar o programa, você obterá uma saída semelhante ao exemplo dos descritores implícitos.

-- Sample test.lua

Todos os modos de abertura de arquivo e parâmetros de leitura para descritores externos são iguais aos descritores de arquivo implícitos.

Outros métodos de arquivo comuns incluem,

  • file:seek(optional whence, optional offset)- De onde o parâmetro é "set", "cur" ou "end". Define o novo ponteiro do arquivo com a posição do arquivo atualizada desde o início do arquivo. Os deslocamentos são baseados em zero nesta função. O deslocamento é medido a partir do início do arquivo se o primeiro argumento for "definido"; da posição atual no arquivo se for "cur"; ou do final do arquivo se for "final". Os valores de argumento padrão são "cur" e 0, portanto, a posição atual do arquivo pode ser obtida chamando esta função sem argumentos.

  • file:flush() - Limpa o buffer de saída padrão.

  • io.lines(optional file name)- Fornece um iterador de loop for genérico que percorre o arquivo e fecha o arquivo no final, caso o nome do arquivo seja fornecido ou o arquivo padrão seja usado e não fechado no final do loop.

Um exemplo para usar o método de busca é mostrado abaixo. Ele desloca o cursor das 25 posições anteriores ao final do arquivo. A função de leitura imprime o restante do arquivo da posição de busca.

-- 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()

Você obterá alguma saída semelhante à seguinte.

sample2 test.lua
--test

Você pode brincar com todos os diferentes modos e parâmetros para conhecer a capacidade total das operações do arquivo Lua.