jjacques68 Posté(e) le 25 mars 2021 Signaler Posté(e) le 25 mars 2021 Hello ! J'aimerais savoir si on peut (et comme le faire) pour stocker un tableau "indexé" dans une variable QA : par exemple : { [clé 1] = "toto" [clé 2] = "lulu" } J'arrive à stocker des tableaux classiques {..., ..., ...} Mais pas ceux-là... Le but étant après récupération avec le json.decode() de pouvoir faire un simple MaTable[MaClé]... merci pour votre aide...
mprinfo Posté(e) le 25 mars 2021 Signaler Posté(e) le 25 mars 2021 voila comment j'ai fais pour un QA contenu de ma variable QA "home Center 2","00:10:4d:fa:a5:cd","192.168.100.44" pour le récupérer en tableau self.DeviceName = {} -- table Nom des devices + numero des label self.macList = {} -- table des adresses Mac local j = 0 for i = 1, 6 do self:updateView("label"..i, "text", " ") local device = "["..self:getVariable("Device "..i).."]" device = json.decode(device) if #device == 2 or #device == 3 then if (device[2]) then -- si mac différent de nil j = j + 1 device[2] = string.lower(device[2]) -- verification de l'adresse mac + est ajout aux table si mac Ok if string.match(device[2], '^[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]$') == nil or string.len(device[2]) ~= 17 then self:warning("onInit(): ", device[2], " est une adresse MAC incorrecte") self:updateView("label"..j, "text", "Erreur Mac Adresse device "..i) else -- si mac OK ajout aux tables self.DeviceName et self.macList self:trace(i," Mac : ", device[2]," - Nom : ",device[1]) self.DeviceName[j] = {device[1], i} self.macList[j] = device[2] self:updateView("label"..j, "text", device[1].." - Mac : "..device[2]) end end end end
jjacques68 Posté(e) le 25 mars 2021 Auteur Signaler Posté(e) le 25 mars 2021 mouais c'est pas mon cas.... Moi j'aurai aimé avoir comme contenu dans cette variable QA (qu'on s'entende bien, quand je dis variable QA, je parle de variables visibles dans l'onglet "variable" du QA) {[ID1]=toto,[ID2]=lulu} ça m'éviterait d'avoir à parcourir toute la table pour trouver ma valeur. J'appelle ID1 et j'ai directe "toto" Comme on fait normalement avec un tableau indexé ! Mais là je souhaite le ranger dans une variable...
Barelle Posté(e) le 25 mars 2021 Signaler Posté(e) le 25 mars 2021 Ben ça marche un tableau dans une variable de QA : local tableau = { [1] = "un", [2] = "deux", [3] = "trois", } self:setVariable("tableau", tableau); local tab = self:getVariable("tableau"); self:trace("type(tab)=", type(tab), ", tab[2]=", tab[2]); ou pour avoir quelque chose de lisible, on emploie le format json : local tableau = { [1] = "un", [2] = "deux", [3] = "trois", } self:setVariable("tableau", json.encode(tableau)); local tab = json.decode(self:getVariable("tableau")); self:trace("type(tab)=", type(tab), ", tab[2]=", tab[2]); 1
jjacques68 Posté(e) le 25 mars 2021 Auteur Signaler Posté(e) le 25 mars 2021 ben !!! mais qu'est ce que j'ai foutu alors ?! dans l'ordre, j'ai créé la variable QA avec juste ça : "{}" ensuite je la récupère avec local MaVar = json.decode(selg:getVariable("MaVarQA")) ensuite j'ajoute une valeur : MaVar[8]="toto" ensuite je mémorise : self:setVariable("MaVarQA", json.encode(MaVar)) et quand je regarde la contenu de la variable j'ai : {"8"="toto"} quand après je relis la variable suivant la même méthode : MaVar[8] il me renvoi nil ???
jjacques68 Posté(e) le 25 mars 2021 Auteur Signaler Posté(e) le 25 mars 2021 avec le json.decode() !!
Barelle Posté(e) le 25 mars 2021 Signaler Posté(e) le 25 mars 2021 Alors, le lua Fibaro prend des initiatives... Et avec : MaVar[tostring(8)] ou MaVar["8"]
jjacques68 Posté(e) le 25 mars 2021 Auteur Signaler Posté(e) le 25 mars 2021 j'avais essayé avec le tostring(), sans résultats... Mais faut que je refasse des essais...
jjacques68 Posté(e) le 26 mars 2021 Auteur Signaler Posté(e) le 26 mars 2021 @Barelle : ça passe avec les tostring() ou les "" Je sais pas ce que j'ai foutu. par contre il faut bien initialiser la variable avec "{}" et non "[]" dans l'onglet du QA. et visiblement les clé sont d'office des string et non des number. Après il est vrai que les variables QA sont un peu spéciales, tout est chaine de caractères... merci !!
Messages recommandés