[LUA] extraction sous chaine de caratère

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
didi
Messages : 32
Inscription : 27 janv. 2018, 22:15

[LUA] extraction sous chaine de caratère

Message 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
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

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

Message 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
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
didi
Messages : 32
Inscription : 27 janv. 2018, 22:15

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

Message 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
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

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

Message par Chrominator »

Fait comme bon te semble, pas de souci.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
didi
Messages : 32
Inscription : 27 janv. 2018, 22:15

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

Message 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
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre