- Fórum
- OTServ
- Recursos
- Linguagens de Programação
- Aulas
- Livraria - Scripting Lua - IO (entrada e saída)
PO
Livraria - Scripting Lua - IO (entrada e saída)
Por Poccnn, 08 de mai. de 2017 em Aulas
livraria
scripting
lua
io
1
1.9k
Por Poccnn, 08 de mai. de 2017 em Aulas
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino
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.
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()
Editado Junho 8 por Poccnn