Ir para conteúdo

Posts Recomendados

Ola galerinha.

Eu sempre percebi que usam muito o arquivo de texto para arquivo remotos.

Mesmo que não apresenta muita diferença entre a manipulação do XML E TXT e interessante aprender a manipular os dois corretamente.

 

O XML e mais usado para configurações e o arquivo de texto e mais usado para "guardar".

Existe outros arquivos remotos como a própria extensão lua onde suas tables e funções podem ser acessadas remotamente.

Um exemplo e sua pasta lib.

 

A melhor formula de procurar valores em um arquivo xml e usando funções para manipulação de strings.

Primeiro precisamos achar o arquivo xml.

Vamos declarar um variável local com o diretório do arquivo.

Aplicamos o modulo "r"(Obs: Existem outros módulos mais por enquanto utilizaremos este)

 

local dir = io.open("data/banana/tangerina.xml", "r")

 

Acessamos a pasta "banana" e abrimos arquivos tangerina.xml.

 

O arquivo XML tinha salvo este texto.

 

<fruta="Banana" quem gosta="Beeki"/>
<fruta="Tangerina" quem gosta="Vodkart"/>
<fruta="Uva" quem gosta="LuckOake"/>
<fruta="Mamão" quem gosta="OneShot"/>
<fruta="Bosta" quem gosta="Stigal"/>

 

Então se consideramos a configuração "beeki gosta da fruta Banana".

Então queremos ver em um script lua qual fruta gosta o beeki:

 

for i in events:read("*a"):gmatch('fruta="(.-)" quem gosta="Beeki"') do

 

Não se assuste irei explicar.

 

O for serve para que ela se repita ou seja ela pode procurar outros valores(Se existir outros valores)

O string.gmatch procuras as linhas.

 

for i in events:read("*a"):gmatch('O QUE VEM ANTES DO QUE PROCURA(.-)O QUE VEM DEPOIS QUE VOCÊ PROCURA(Esta parte finaliza a busca)') do

 

O sinal (.-) significa o valor que você quer procurar.

 

Alguns exemplos:

 

Quero todas as frutas no xml!

 

for i in events:read("*a"):gmatch('fruta="(.-)"') do

 

Quem gosta de tangerina?

 

for i in events:read("*a"):gmatch('fruta="Tangerina" quem gosta = "(.-)"') do

 

Quero os nomes das pessoas do xml!

 

for i in events:read("*a"):gmatch('quem gosta="(.-)"') do

 

 

Diquinhas(dicas):

- Deve tomar alguns cuidado com o "...." ou '....' podem ocorrer erros com este tipo de coisa(Experiencia Propriá :/)

 

- Depois que achar o valor se for number use tonumber(value) se for string tostring(value).

 

- Você pode "reprocurar" o script exemplo.

 

For i ...string.gmatch(blabla)... do
local value  = tonumber(i:match('quero este valor="(.-)"'))

 

- Quando tiver tempo de uma olhada em LUAXML ela se encontra em lua.org

 

 

 

E protinho fim de tutorial.

Não sou bom em organização de tópicos

Obrigado aos usuários que foram acessados remotamente(Eu não pedi autorização)

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

Cara quando se fala "remoto", se remete a algo longícuo, um arquivo no seu computador não se caracteriza em arquivo remoto, seria remoto se fosse em rede, acessando por socket curl etc.

E a titulo de informação, existe inúmeros modos de se manipular arquivos, você mostro apenas o io.open ccm o argumento "r", só dentro dele existem mais 8 modos de manipulação (rb, r+b, w, wb, w+b, a, ab, a+b). Dentro da biblioteca io também há mais funções para manipulação.

E uma coisa muito importante que você deixou passar, SEMPRE que abrir um arquivo, feche após o uso, em sistemas como windows, o arquivo não poderá nem ser excluido por estar aberto.

 

-- abrindo o arquivo em modo de atualização
local file = io.open(file, "r+")
-- lendo todo o arquivo como string e salvando na variável str
local str = file:read("a*")
-- o arquivo ja foi salvo, não há mais a necessidade de mantê-lo aberto, então feche
file:close()

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...