Ir para conteúdo

Livraria - Scripting Lua - IO (entrada e saída)


Poccnn

Posts Recomendados

As Livrarias de Lua

 

 

Existe funções aqui que não tenho como demonstrar seu funcionamento sozinho, pois dependem de outras funções.

A livraria I/O (entrada e saída de dados):

io.open(fn[,m])

Abre o arquivo fn no modo m: "r" = ler [default], "w" = escrever, "a" = adicionar, "r+" = atualizar-preservar, "w+" = atualizar-apagar, "a+" = atualizar-adicionar.

io.close([file])

Fecha o arquivo.

io.read([file,]formatos)

Retorna o valor vindo de file para cada formato passado como argumento: "*n" = ler números, "*a" = ler todo o arquivo, "*l" = ler a primeira linha [default], n = ler os dados no arquivo da primeira até a posição n.

io.lines([fn])

É um iterador que lê o arquivo fn linha por linha. ela não fecha o arquivo.

io.write([file,]values)

Uma função de saída de dados; imprime os valores no console ou escreve em arquivos.

io.seek([p][,of])

Seta a posição p (“set” = inicio [default], “cur” = marca uma posição no arquivo (of), “end” = final) relativa no arquivo corrente.

io.input([file])

Marca o arquivo file como padrão para entrada de dados.

io.output([file])

Marca o arquivo file como padrão para saída de dados.

io.flush([file])

Salva os dados no arquivo da saída de dados.

io.type(x)

Retorna uma string: “file” se x for um arquivo aberto; “closed file” se x estiver fechado ou nil caso x não seja um arquivo.

io.tmpfile()

Cria um arquivo temporário (que será deletado depois que terminar o programa).

io.popen([prog[,mode]])

Inicia um programa prog em processo separado e pode ser usado para ler (se mode for “r” [default]) ou para escrever dados (se mode for “w”) no programa.

 

 

 

 

Exemplos

 

 

Irei usar um arquivo com esse conteúdo para teste das funções.

 

arquivo_teste.jpg

 

io.read([file,]formatos):

arq = io.open(dir,"r")

 

 

len = arq:read(10) -- definindo a quantidade de caracteres que será retornado.

print(len) >> “<instant”

 

 

lin = arq:read("*l") -- Ler somente a primeira linha do arquivo.

print(lin) >> “<instant name="Flame Strike" words="exori flam" lvl="12" mana="20" prem="1" range="3" needlearn="1" event="script" value="attack/flame strike.lua">”

 

 

all = arq:read(“*a”) -- Retorna todos os caracteres do arquivo.

print(all) >> “<instant name="Flame Strike" words="exori flam" lvl="12" mana="20" prem="1" range="3" needlearn="1" event="script" value="attack/flame strike.lua">

         <vocation id="1"/>

         <vocation id="2"/>

         <vocation id="5"/>

         <vocation id="6"/>

         <vocation id="9"/>

         <vocation id="10"/>

</instant>”

arq:close() -- fecha o arquivo

 

 

Para usar o formato de “*n” o arquivo deva iniciar com números ou não irá conseguir pega-lo.

-- Diremos que o arquivo contenha esses dados.

 

-- apenas exemplo.

 

dir = “2354 passe 3030 meio

arq = io.open(dir, “r”)

num = arq:read(“*n”)

arq:close() -- fecha o arquivo

print(num) >> 2354

 

 

io.lines([fn]):

arq = io.open(dir,"r")

 

 

local pp = 1

for result in arq:lines() do

         print(pp,result)

         pp = pp+1

end

 

arq:close() -- fecha o arquivo

 

 

1       <instant name="Flame Strike" words="exori flam" lvl="12" mana="20" prem="1" range="3" needlearn="1" event="script" value="attack/flame strike.lua">

2                 <vocation id="1"/>

3                 <vocation id="2"/>

4                 <vocation id="5"/>

5                 <vocation id="6"/>

6                 <vocation id="9"/>

7                 <vocation id="10"/>

8       </instant>

 

 

io.write([file,]values):

arq = io.open(dir,"w")

arq:write("Escrevendo em um arquivo.") -- escreve esse texto no arquivo.

io.write("Escreve no console.") -- escreve esse texto no console.

arq:close()

 

 

io.seek([p][,of]): sem o uso da definição de posição (of)

arq = io.open(dir,"r")

print(arq:read("*l")) >> <instant name="Flame Strike" words="exori flam" lvl="12" mana="20" prem="1" range="3" needlearn="1" event="script" value="attack/flame strike.lua">

arq:seek("cur") -- usa como parâmetro para demarca a posição corrente a ultima obtenção de dados do arquivo.

print(arq:read("*l")) >> <vocation id="1"/>

arq:close()

 

 

io.seek([p][,of]): usando a definição de posição (of)

arq = io.open(dir,"r")

arq:seek("cur",90)

print(arq:read("*l")) >> learn="1" event="script" value="attack/flame strike.lua">

arq:close()

 

 

io.input([file]):

arq = io.open(dir,"r")

io.input(arq)

print(io.read("*l")) -- não requer mais o uso do parâmetro file.

>> learn="1" event="script" value="attack/flame strike.lua">

io.close() -- idem.

 

 

io.output([file]): faz o inverso do input.

arq = io.open(dir,"w")

io.output(arq)

io.write("Somente escreve no arquivo e não mais no console.") -- escreve esse texto no arquivo.

arq:close()

 

 

io.tmpfile() e io.type(arq):

temp = io.tmpfile()

temp:write("escrevendo algo em um arquivo temporario")

print(io.type(temp))

 

 

io.popen([prog[,mode]]):

file = assert(io.popen('lua.exe','w'), “assert failed”) -- abre um programa

io.output(file)

io.write("print 'ola mundo'") -- insere dados no programa aberto

file:close()

 

 

arquivo_teste.thumb.jpg.4774910af1fdce2f7a0417476080ccb0.jpg

Editado por Poccnn
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...