Aller au contenu
jjacques68

stocker un tableau dans variables QA

Recommended Posts

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...

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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...

Partager ce message


Lien à poster
Partager sur d’autres sites

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]);

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ???

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors, le lua Fibaro prend des initiatives... Et avec :

MaVar[tostring(8)]

ou

MaVar["8"]

 

Partager ce message


Lien à poster
Partager sur d’autres sites

j'avais essayé avec le tostring(), sans résultats...

:15:

Mais faut que je refasse des essais... 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@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 !!

Partager ce message


Lien à poster
Partager sur d’autres sites

×