Aller au contenu

Un parser simple ?


nigao

Messages recommandés

Contexte : j'essaye de faire un VD qui sur détection de mouvement allume automatiquement mes philips HUE

Mais cela avec différents niveau d'intensité et +/- de bleu en fonction des heures de la journées (histoire que à 2h du mat, on se prend pas le truc plein pot dans la face pour aller aux toilettes, mais que à 19h ça soit une intensité différente)

 

J'essaye pour cela de parser une variable mais je cale... (je trouve différents parser sur le site, mais ça me semble une usine à gaz pour ce que je veux faire.)

Existe t'il un code lua qui tiennent en quelques lignes seulement pour mes besoins ?

 

Exemple avec ma variable planning_couleur["14"] = "65500,255,125,50,15"

 

Je souhaite découper cette chaîne à chaque virgule et éclater les données dans d'autres variables avec

HUE_color = 65500

HUE_Brigthness = 255

HUE_Saturation = 125

HUE_Variation = 50

HUE_SecondeOff = 15

 

J'ai testé un truc du style string.match("65500, 255, 125, 50, 15","%d+") me renvoi 65500 seulement

J'ai essayé de bouclé avec 

for w in string.match("65500, 255, 125, 50, 15","%d+")

do

print (w)

end

Mais j'ai un 'attempt to call a string value

 

-------------------

Bon j'ai réussi à avancer avec la commande suivante 

 

local example = "65500,255,125,50,15"
forin string.gmatch(example, "%d+") do
   print(w)
end

Mais comment affecter les valeurs dorénavant ?

dire que w(1) va dans la variable HUE_color

dire que w(2) va dans la variable HUE_Brigthness

etc

Modifié par nigao
Lien vers le commentaire
Partager sur d’autres sites

Un petit bout de code dont je suis incapable de retrouver la paternité, tu passes en paramètres ta variable et ton séparateur, on te renvoi un tableau :

 

function split(inputstr, sep)
	if sep == nil then
    	sep = ","
    end
    local t={} ; 
    local i=1;
    for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
    	t[i] = str
        i = i + 1
    end
    return t
end

 

Lien vers le commentaire
Partager sur d’autres sites

merci @Indyana

Je le met de côté si j'y ferais souvent appel

En tout cas, ça m'a mis sur la voie pour simplifier mon code quand je veuxle faire en oneshot

Ainsi dans mon cas, 

for w in string.gmatch(value,"([^,%s]+)") do planning_parser[#planning_parser + 1] = w end

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Voici le parser de @Steven utilisé dans GEA

 

GEA.split = function(text, sep)
local sep, fields = sep or ":", {}
local pattern = string.format("([^%s]+)", sep)
text:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end

 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...