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
[LUA] extraction sous chaine de caratère
-
Chrominator
- Messages : 1042
- Inscription : 19 déc. 2015, 07:29
- Localisation : France
Re: [LUA] extraction sous chaine de caratère
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 :
Ça produit ça :
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"])
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
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
Re: [LUA] extraction sous chaine de caratère
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
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
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
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
Re: [LUA] extraction sous chaine de caratère
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
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
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