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.