#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