#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


