banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Wed 16 December 2009 09:49

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

TCL : récupération d'une valeur de liste

Aloha
J'ai ce code :

Code:

set num_adr [FME_GetAttribute adr_{i}.numero]
puts "objet adresse testé : $num_adr"

Mais il ne renvoie que vide, alors que les avaleurs existent. Quelqu'un(e) voit-il où je me suis trompé ?
Avec

Code:

set num_adr [FME_GetAttribute adr_{$i}.numero]
puts "objet adresse testé : $num_adr"

cela fonctionne mieux...

Et voici le code pour une recherche des mes numéros d'adresse les plus proches. Ce n'est pas "très propre", mais ça fonctionne bien.

Code:

proc adressage {} {
       puts "**************************************************************"
       puts "|                                                            |"
       puts "|                 début de la boucle                         |"
       puts "|                                                            |"
       puts "**************************************************************"
       after 3000
       #récupération des valeurs d'attribut
             set num [FME_GetAttribute NUM_VOIE]
       puts "num: $num"
       set nmax [FME_GetAttribute stat_adr_{0}._max]
       puts "nmax : $nmax"
       set nmin [FME_GetAttribute stat_adr_{0}._min]
       puts "nmin : $nmin"
       set GID_ADR ""
       
             set n [ FME_Execute NumElements adr ]
       set e_e 0
       puts "ecart_sup : $e_e"
             set e_d 0
       puts "ecart_inf : $e_d"
       
       #première boucle en incrémentant le numero_voie de l'entreprise
       for { set numv [FME_GetAttribute NUM_VOIE] ; 
                          set i 0 ;
                          set sortie 0;
                         set _nb [FME_Execute NumElements adr_{}]
                        } {( $numv <= $nmax ) && ($sortie == 0)} { incr numv } {
            #puts "numero testé : $numv"
                        set i 0
            set _nb [FME_Execute NumElements adr_{}]
            #test d'identité sur les adresses récupérées en liste
                        while { $i < $_nb } {
                                    set num_adr [FME_GetAttribute adr_{$i}.numero]
                                    #puts "objet adresse testé : $num_adr"
                                    if { $numv == $num_adr} then {
                                         #récupération du GID
                                         puts "numero testé : $numv"
                                         puts "objet adresse testé : $num_adr"
                                         set GID_ADR_e [FME_GetAttribute adr_{$i}.GID];
                                         puts "GID_ADR_e retenu : $GID_ADR_e" 
                                         #calcul de la distance entre les adresses réelle et récupérée
                                         set e_e [expr {abs ($num - $num_adr)} ];
                                         puts "ecart_sup : $e_e"; 
                                         set sortie 1 ;
                                         #sortie de la boucle
                                         break } else {incr i}
                                    } ;

       }
       
       #boucle en décrémentant
      for { set numv [FME_GetAttribute NUM_VOIE] ; 
                          set i 0 ;
                          set sortie 0;
                         set _nb [FME_Execute NumElements adr_{}]
                        } {( $numv >= $nmin ) && ($sortie == 0)} { incr numv -1 } {
            #puts "numero testé : $numv"
                        set i $nmax
            set _nb [FME_Execute NumElements adr_{}]
            #test d'identité sur les adresses récupérées en liste
                        while { $i >= 0 } {
                                    set num_adr [FME_GetAttribute adr_{$i}.numero]
                                    #puts "objet adresse testé : $num_adr"
                                    if { $numv == $num_adr} then {
                                         #récupération du GID
                                         puts "numero testé : $numv"
                                         puts "objet adresse testé : $num_adr"
                                         set GID_ADR_d [FME_GetAttribute adr_{$i}.GID]; 
                                         puts "GID_ADR_d retenu : $GID_ADR_d"
                                         #calcul de la distance entre les adresses réelle et récupérée
                                         set e_d [expr {abs ($num - $num_adr)} ];
                                         puts "ecart_inf : $e_d";
                                         set sortie 1 ;
                                         #sortie de la boucle 
                                         break } else {incr i -1 }
                                    } ; 

       }
       #arbitrage entre les deux adresses récupérées
       if {($e_d != 0 ) && ($e_e != 0 )} then {
       if {$e_d > $e_e} then {FME_SetAttribute GID_ADR $GID_ADR_e} else {FME_SetAttribute GID_ADR $GID_ADR_d} } else {
             if {($e_d != 0 )} then {FME_SetAttribute GID_ADR $GID_ADR_d} else {if {($e_e != 0 )} then {FME_SetAttribute GID_ADR $GID_ADR_e}}}
       
       
       
       }

Dernière modification par Pierre (Wed 16 December 2009 10:37)


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

Pied de page des forums

Powered by FluxBB