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

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 02 March 2001 01:11

Claude Paquet
Invité

Programation avenue

Bonjour a tous,

j'ai deux problemes avec la programmation Avenue.

Probleme de programmation

Voici deux problemes de programmation relies a un script en langage Avenue.

Probleme 1

Le premier probleme concerne l'utilisation d'une variable numerique capter
dans une boite de message et utilisee pour des calculs. Exemple.

Voici la table :

PerturbationAnnee de perturbationÂge de la perturbation
CPR1978
CT1998
PLR1986

'**********Prealablement, une boite sous forme de liste capte l'annee
actuelle

liste = { 1999 , 2000 , 2001 }

boite = msgbox.choiceasstring( liste, Choisir l'annee actuelle , Annee )

msgbox.info( Vous avez choisi ++boite, Choix )

'**************Utilisation de l'annee choisie

ori=v.FindField( Âge de la perturbation )

cal1 = ((boite) - ([Annee de perturbation].AsNumber))

v.calculate (cal1, ori)
v.refresh

'************Donc, par exemple, si nous sommes en 2001, pour le premier
enregistrement, l'age de la perturbation devrait etre 23.
'************Si j'ecris 2001 directement au lieu boite, le calcul se fait
tres bien alors que si j'utilise la variable, ca ne marche pas

Donc la question 1 est de savoir comment utiliser une variable numerique
capter dans une boite de message.

Probleme 2

Le probleme 2 consiste a apporter une table dans un projet. Dans l'exemple,
a l'aide de la commande  .summarize , une table de sommation est creee et
celle-ci s'enregistre dans le meme dossier que le projet. Cependant, je ne
connais pas la commande pour mettre cette table dans le projet. Si j'ajoute
la table dans le projet en dehors du script(a la main), il n'y a pas de
probleme pour travailler avec la table par la suite. Exemple

Voici la table avant la sommation :

EssenceVolumeSuperficie
EE2310
SS3412
EE405
ES506
SS2020

Voici le script :

'****************Ouvrir la table

t=av.getactivedoc

'****************Rendre la table en Vtab

v=t.getvtab

v.StartEditingWithRecovery

e = v.FindField( Essence )
vo= v.FindField( Volume )
s = v.FindField( Superficie )

newVTab = v.Summarize( sommation .AsFileName, dBASE, e,{vo, s },
{ #VTAB_SUMMARY_SUM, #VTAB_SUMMARY_SUM })

'*******Jusqu'ici, il n'y a pas de probleme, la table suivante(sommation)
est creee et cette table est enregistree dans le meme dossier que le projet

EssenceVolumeSuperficie
EE6315
SS5432
ES506

'******Maintenant, il manque la commande pour apporter cette table dans le
projet

????????????????????????????

'******Par la suite, une fois que la table est dans le projet, on peut la
manipuler

matable= av.getproject.finddoc( zxz.dbf )

maTable.GetWin.Open
lavtab = matable.getvtab
matable.setname(lavtab.getname)
lavtab.seteditable(false)

Donc, le probleme deux consiste a apporter une table dans un projet.

Claude Paquet
Tech. de la faune
Ministere des ressources naturelles
Direction de l'environnement forestier
880 ch. Sainte-Foy, local 5.50
(Quebec), Quebec   G1S 4X4

 

#2 Tue 06 March 2001 01:14

Robin Prest
Invité

Re: Programation avenue

Bonjour,

Je ne connais pas votre niveau en langage Avenue, mais un conseil ne fait
pas de mal . Utilisez l'execution pas-a-pas. C'est un peu long, mais ca a le
merite de localiser les erreurs. La plupart du temps les erreurs sont dues a
la classe de l'objet que vous utilisez (view, table, vtab, ftab, theme,
etc). Une bonne requete pour verifier que l'objet manipule est le bon :

Admettons que vous ayez un objet O que vous souhaitez manipuler :

msgbox.info(O.getclass.getclassname.asstring, Type d'objet )

Si votre objet est un theme, il vous renverra theme , si c'est une vtab, il
vous renverra vtab , ...et ainsi de suite.

(je ne suis pas sur que le asstring est necessaire)

Cela vous sera utile si jamais vous croyez utiliser un objet (string) et que
vous avez oublie quelque chose comme un asstring (cf reponse de M.
Vasquez)

Cordialement. RP

 

#3 Tue 06 March 2001 01:15

Vasquez Mickaël
Invité

Re: Programation avenue

Probleme 1 :
si tu ecris cal1 = ((boite) - ([Annee de perturbation].AsNumber)) , ce que
va recevoir Arview, c'est effectivement ((boite) - ([Annee de
perturbation].AsNumber)). Or, boite ne signifie rien pour lui.
Il faut donc ecrire (( + boite.asstring + ) - ([Annee de
perturbation].AsNumber))

Probleme 2

myTable=Table.Make(newVTab)
av.GetProject.AddDoc(mytable)

 

Pied de page des forums

Powered by FluxBB