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.
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 ...