Usando a função string.separe para obter valores de dentro de uma string

Iniciado por adalberto, Julho 06, 2017, 03:45:47 PM

tópico anterior - próximo tópico

adalberto

Dando uma simples pesquisada nos patterns em Lua percebi o quanto é fácil buscar um valor específico de dentro de uma string em Prisma.

Imagine uma configuração:

id=acff24ccbe
path=/home/user/.myprog/
size=32
time=320s
color=blue
pass=adffdb49cdaeebca1282fedd
user=myuser

Isso dentro de um arquivo.

A pergunta é: qual a melhor maneira de ler esses valores?
Poderíamos facilmente usar string.analise para quebrar em uma tabela, mas há uma função ainda mais simples: a string.separe(); que é uma função de captura.

Veja o modelo de busca que vamos usar: 'chave=(.-)[\r\n].*$'

Claro que a chave deve ser concatenada em tempo de execução, daí saiu a seguinte função de busca:



s = [[
id=acff24ccbe
path=/home/user/.myprog/
size=32
time=320s
color=blue
pass=adffdb49cdaeebca1282fedd
user=myuser
]]

funcao obt_var(s,ch)
  retorne s:separe(ch .. '=(.-)[\r\n].*$');
fim

local id = obt_var(s, 'id');
poe(id);  //--> acff24ccbe;
local user = obt_var(s,'user');
poe(user); //-->myuser

//e assim por diante.



Se a configuração estiver em um arquivo, basta ler em modo binário e passar a string para busca com a chave.

Esta função está sendo muito útil para mim quando eu quero ler um arquivo de configuração de rede no Linux.

Falou, até a próxima.

rafael

Eu tava usando a função capte:

funcao Distrincha(Biscoito)
         local res = {}
         para pares em string.capte(Biscoito, "[^;]+")
                                                       // aqui também pode ler a linha inteira: "[^\r]*"
         inicio
            local eq = string.procure(pares, "=")
            se eq
            entao
               local chave = pares:corte( 1, eq-1):apare()
               local valor = pares:corte(eq+1,eq+8):apare()
               se chave == "IdDaSessao" e valor
               entao IdDaSessao = valor
               fim
            fim
         fim
      fim      
Mas desse jeito aí é bem mais fácil.
Não esquecendo da json que também já tem ajudado muito! No caso a json serve para vários valores tipo matriz. valor pai -> valor filho -> valor neto -> valores bisnetos ...