Page 1 sur 1

[LUA] extraction sous chaine de caratère

Publié : 13 juin 2020, 17:34
par didi
Bonjour
ma chaine est :
{"JourJ1":{"Tempo":"TEMPO_ROUGE"},"JourJ":{"Tempo":"TEMPO_BLEU"}}

je souhaite récupérer la sous-chaine 1 :
TEMPO_ROUGE
et la sous-chaine 2 :
TEMPO_BLEU

La sous-chaine 1 peut être de longueur variable, de même que la sous-chaine 2 (en fonction de leur contenu).

Quelle fonction LUA dois-je utiliser? et avec quels paramètres?

merci

Re: [LUA] extraction sous chaine de caratère

Publié : 13 juin 2020, 20:06
par Chrominator
Ta chaine est en JSON.

Tu peux la décoder facilement avec ça.

Tu download le fichier JSON.lua dans le répertoire de ton choix, moi je l'ai mis dans les scripts de DZ.

Ensuite tu verras avec l'exemple suivant comment on décode ta chaine :

Code : Tout sélectionner

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
local tarif = '{"JourJ1":{"Tempo":"TEMPO_ROUGE"},"JourJ":{"Tempo":"TEMPO_BLEU"}}'
local lua_value = json:decode(tarif)
print(lua_value.JourJ["Tempo"])
print(lua_value.JourJ1["Tempo"])
Ça produit ça :

Code : Tout sélectionner

$ lua test.lua
TEMPO_BLEU
TEMPO_ROUGE

Re: [LUA] extraction sous chaine de caratère

Publié : 13 juin 2020, 21:28
par didi
ok, mais je souhaite faire l'extraction de la sous chaine dans le LUA de Domoticz sans avoir à downloader un fichier quelque part.
Je pense qu'il soit possible de décoder dans un LUA directement.
j'ai vu ceci dans un SH :
coul_J=(grep -Po '(?<="JourJ":{"Tempo":")[^"]+(?=")' 'a')
coul_J1=$(grep -Po '(?<="JourJ1":{"Tempo":")[^"]+(?=")' 'a')

Comment je peux transposer ces 2 lignes en codage LUA , avec des string.sub ou string.find ...etc... par exemple?

merci

Re: [LUA] extraction sous chaine de caratère

Publié : 13 juin 2020, 22:03
par Chrominator
Fait comme bon te semble, pas de souci.

Re: [LUA] extraction sous chaine de caratère

Publié : 13 juin 2020, 22:35
par didi
Bon, j'ai bossé un peu et voilà ce que j'obtiens :
jsonHisto contient ma chaine {"JourJ1":{"Tempo":"TEMPO_ROUGE"},"JourJ":{"Tempo":"TEMPO_BLEU"}}

mon code est :

x=string.len(jsonHisto)
i, j = string.find(jsonHisto, '{"JourJ1":{"Tempo":"TEMPO_')
--print(i, j)
k ,l = string.find(jsonHisto, '"},"JourJ":{"Tempo":"TEMPO_')
--print(k, l)

coul_J1=string.sub(jsonHisto, j+1, k-1)
print("couleur J1 : ".. coul_J1)
coul_J=string.sub(jsonHisto, l+1, x-3)
print("couleur J : ".. coul_J)


Et donc j'ai bien la couleur du jour dans coul_J et la couleur du lendemain dans coul_J1 .

y aurait-il un moyen de faire plus condensé ?

merci

Re: [LUA] extraction sous chaine de caratère

Publié : 14 juin 2020, 07:59
par denis_brasseur
didi a écrit : 13 juin 2020, 22:35 y aurait-il un moyen de faire plus condensé ?
Oui, Chrominator t'a donné la réponse me semble t-il, il n'y a pas de download de fichier dans sa méthode, a part JSON.lua dans le répertoire de ton choix