Forum Programmation.autre TCL / Expect Tableau bizarre

Posté par . Licence CC by-sa.
Tags :
0
26
mar.
2018

Bonjour tout le monde.

J'ai un souci sur un langage que je ne maîtrise pas, TCL… Je suis sur que c'est simple, mais malgré avoir lu et relu une tonne de doc, je ne sais pas quoi faire pour "dérouler" ce tableau.

J'ai donc un tableau, et quand je l'affiche, ça me donne ça :

puts "table $mytable"

résultat :

table {{
    name lala
    nodeaddr 8.5.2.1
    port 80
}} {{
    name lolo
    nodeaddr 5.2.1.4
    port 80
}}

Si je fais un :

foreach item $mytable {
    puts "item $item"
}

résultat

item : {
    name lala
    nodeaddr 8.5.2.1
    port 80
}
item : {
    name lolo
    nodeaddr 5.2.1.4
    port 80
}

Donc j'arrive à avoir chaque item, mais je n'arrive pas à accéder au valeur, on dirait un tableau associatif dans un tableau mais apparemment les tableaux multidimensionnel ne sont pas possible.

 mytable(0)(name) ou autre mytable(0,name)

ne fonctionnent pas…

Merci d'avance si quelqu'un a une idée de comment je pourrais faire !

  • # TCL...

    Posté par . Évalué à 2.

    Apparemment, les tableaux ou les listes doivent être sur une seul ligne… Et pour enlever les "retours chariot" dans ce langage, c'est un projet…

    Je hais ce langage…

    • [^] # Re: TCL...

      Posté par . Évalué à 3.

      Tu veux dire que tu hais les langages qui ont un comportement qui dépend de la forme? Je n'ose imaginer ton opinion de python, du coup :)

      • [^] # Re: TCL...

        Posté par . Évalué à 3.

        Globalement, je hais tous les langages que je ne connais pas pendant une heure ou deux, le temps de rentrer dedans. Mais TCL…

  • # La réponse est "dict"

    Posté par . Évalué à 1.

    Bonjour,

    Voici une fonction d'exemple qui te donne la syntaxe pour extraire les informations:

    proc get_it {table idx key} {
       return [dict get [lindex [lindex $table $idx] 0] $key]
    }
    
    # Et un exemple pour l'utiliser:
    for {set i 0} {$i < [llength $mytable]} {incr i} {
        puts "($i) -> ([get_it $mytable $i name] = [get_it $mytable $i nodeaddr])"
    }

    Y'aurait probablement moyen de faire plus adapté selon ce que tu veux faire tes données.
    Sinon je n'ai pas compris ta remarque ci-dessus sur les retours à la ligne et les liste. En TCL le parseur est très simple, et la pratique générale est d'utiliser les accolades pour les listes avec les espaces/tabs/CR entre les éléments, par exemples:

    set une_liste {element1 elm2 elm3}

    mais aussi:

    set une_autre_liste {
       un_element
       "un deuxieme element" {un troisieme element}
       le_quatrieme
    }

    TCL est simple, mais il possède un défaut: il faut le connaitre pour l'apprécier. Comme tous les autres langages en fait. Après, il est vrai qu'il est passé de mode, mais ça, ça arrivera à tous les langages.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.