nigao Posté(e) le 15 mai 2017 Signaler Posté(e) le 15 mai 2017 (modifié) 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" for w in 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é le 15 mai 2017 par nigao
Indyana Posté(e) le 15 mai 2017 Signaler Posté(e) le 15 mai 2017 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
nigao Posté(e) le 16 mai 2017 Auteur Signaler Posté(e) le 16 mai 2017 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
pepite Posté(e) le 16 mai 2017 Signaler Posté(e) le 16 mai 2017 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
Messages recommandés