PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Détermination du nom d'une variable passé en paramètre d'une procédure
Détermination du nom d'une variable passé en paramètre d'une procédure
Débuté par Sylvain RICAU, 20 fév. 2017 11:26 - 15 réponses
Membre enregistré
88 messages
Popularité : +2 (4 votes)
Posté le 20 février 2017 - 11:26
Bonjour,

Je voudrais connaitre le nom du tableau passé en paramètre dans une procédure.

Malheureusement, la propriété ..Nom n'existe pas pour une variable comme pour un fichier HFSQL.

Existe t il une fonction ou une méthode pour obtenir l'équivalent de la propriété ..Nom ?

Illustration :

Tableau_ATraiter est tableau de chaîne
Essai(Tableau_ATraiter)

Procedure Essai(Tab_ATraiter)
NomTab_ATraiter est chaîne=Fonction_ou_ Procedure(tab_ATraiter)


je voudrais que la procédure "Fonction_ou_Procédure" renvoie "Tableau_ATraiter"


Merci d'avance pour vos retours
Posté le 20 février 2017 - 11:43
Bonjour,
Désolé de répondre à une question par une autre question, mais pour quoi
faire ?
Pourquoi ta procédure a besoin de connaitre le nom de la variable passée en
paramètre ?

Frédéric.

"Sylvain RICAU" a écrit dans le message de groupe de discussion :
2017c94152b02a8fecae079c2d3e37745b14@news.pcsoft.fr...

Bonjour,

Je voudrais connaitre le nom du tableau passé en paramètre dans une
procédure.

Malheureusement, la propriété ..Nom n'existe pas pour une variable comme
pour un fichier HFSQL.

Existe t il une fonction ou une méthode pour obtenir l'équivalent de la
propriété ..Nom ?

Illustration :

Tableau_ATraiter est tableau de chaine
Essai(Tableau_ATraiter)

PROCEDURE Essai(Tab_ATraiter)
NomTab_ATraiter est chaine=Fonction_ou_ Procédure(tab_ATraiter)


je voudrais que la procédure "Fonction_ou_Procédure" renvoie
"Tableau_ATraiter"


Merci d'avance pour vos retours
Membre enregistré
88 messages
Popularité : +2 (4 votes)
Posté le 20 février 2017 - 18:55
Bonjour Frédéric,

Car j'ai besoin d'informations concernant le tableau que j'ai déjà déterminées, que je ne veux pas redéterminer et auxquelles j'ai accès uniquement par le nom du tableau.

As tu une piste à me proposer ?

Cdl
Membre enregistré
950 messages
Popularité : +53 (63 votes)
Posté le 21 février 2017 - 00:00
Bonjour,

je pense qu'en utilisant les indirections, tu peux trouver ton bonheur

http://doc.pcsoft.fr/fr-FR/?1512005&name=Operateur_indirection_champ_et_rubrique

jordan
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 21 février 2017 - 04:19
Bonjour,

Quel est le type d'informations que vous avez besoin de récupérer pour avoir besoin du nom de la variable ?

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
88 messages
Popularité : +2 (4 votes)
Posté le 21 février 2017 - 07:56
Bonjour,

Par exemple, j'ai besoin de connaitre le membre correspondant à l'identifiant d'une ligne du tableau, ce membre étant définit dans un autre tableau dont la clé est le nom du tableau.

En réponse à Jordan, je ne pense pas que l'utilisation des indirections soit la solution car l'indirection permet d'accéder à une variable à partir de son nom et non l'inverse.

Cdl
Membre enregistré
355 messages
Popularité : +37 (39 votes)
Posté le 21 février 2017 - 08:37
Bonjour Sylvain,

SI tu veux récupérer le nom du tableau dans ta procédure, pourquoi ne pas directement passer ce nom (au lieu de la variable) et ensuite accéder au contenu par les indirections ?
Un truc du genre par exemple
Tableau_ATraiter est tableau de chaîne
Essai("Tableau_ATraiter")

Procedure Essai(sNomTab)

Tab_ATraiter est un tableau dynamique
Tab_ATraiter<={sNomTab,indVariable}

A+

--
Francis MOREL
http://www.SoftProtect.fr
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 21 février 2017 - 10:30
Je suis désolé, mais je ne comprends toujours pas ce que tu veux faire, mais pour moi la seule solution reste de passer le nom de ton tableau en paramètre.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
88 messages
Popularité : +2 (4 votes)
Posté le 21 février 2017 - 10:37
Bonjour Francis,

Merci pour ta proposition.

C'est effectivement une solution, mais que je souhaiterais éviter, car cela nécessite de revoir une bonne partie de mon code.

Donc s'il y avait une autre solution, cela m'arrangerait.

Cdl
Membre enregistré
43 messages
Popularité : +1 (1 vote)
Posté le 21 février 2017 - 10:42
Bonjour,

Un petit bout dfe code avec les indirections :

Procedure gproc_calcul_pied_ligne(nom_fen="",nom_fic="")

SI nom_fen="" OU nom_fic="" ALORS
Erreur("La procédure attend le nom d'une fenêtre et d'un fichier")
RETOUR
FIN

codetva est un entier
montant_ligne est un monétaire
nfe, nfi sont des chaînes

nfe=nom_fen
nfi=nom_fic

{nfe+".TOTTVA",indChamp}=0
{nfe+".NETHT",indChamp}=0
{nfe+".NETTTC",indChamp}=0
{nfe+".BRUTHT",indChamp}=0


Cela devrait convenir.

Hubert
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 21 février 2017 - 11:41
bonjour Sylvain,

vous pouvez tester quelque chose comme ceci , mais ce n'est pas super super....
Je pense qu'il faudra quand même revoir votre code, soit comme proposé par Francis utiliser les indirections, ou bien encapsulé vos tableaux de chaines dans des classes.

_my_tab est un tableau de chaîne

Ajoute(_my_tab,"toto")
Ajoute(_my_tab,"tata")

ma_procedure(_my_tab)


Procedure ma_procedure(vp_tab)

PRIVÉ
_my_buff est un Buffer
_desc_param_xml est un xmlDocument
_noeud est un xmlNoeud

Sérialise(vp_tab,_my_buff,psdXML)
_desc_param_xml=XMLOuvre(_my_buff,depuisChaîne)
_noeud=_desc_param_xml..NoeudRacine[1]..NoeudFils[1]
Info(_noeud..Nom) // Affichera : _my_tab


bon dèv ;)
Message modifié, 21 février 2017 - 11:41
Membre enregistré
355 messages
Popularité : +37 (39 votes)
Posté le 21 février 2017 - 11:42
Re,

C'est effectivement une solution, mais que je souhaiterais éviter, car cela nécessite de revoir une bonne partie de mon code.

Donc s'il y avait une autre solution, cela m'arrangerait.

Je ne vois pas simplement d'autre solution, la propriété nom n'étant pas utilisable dans ce cas.
Cela dit la modification n'est pas bien conséquente avec la Recherche/Remplace de l’éditeur, associée éventuellement avec les références croisées.
Probablement que cela irait bien plus vite que de rechercher autre chose.

A+

--
Francis MOREL
http://www.SoftProtect.fr
Membre enregistré
88 messages
Popularité : +2 (4 votes)
Posté le 21 février 2017 - 13:10
Merci à tous pour vos réponses.

Une mention spéciale à Christophe pour l'originalité de la solution proposée.

A+
Posté le 21 février 2017 - 13:45
Avec les indirections :

Version d'origine :

Procdure fff( a est un entier)
// traitement


Version modifiée :
Procedure fff ( sch est une chaîne )
Info( sch ) // Nom de la variable d'origine
a est un entier
a = {sch, indVariable }
// et on enchaîne sur le traitement existant


On a donc très peu de changement dans la procédure elle-même, et très peu aussi au niveau du programme appelant.
Membre enregistré
355 messages
Popularité : +37 (39 votes)
Posté le 21 février 2017 - 15:16
Bonjour Joel,

As-tu testé ta proposition ?
Chez moi cette méthode ne marche pas :(
Erreur : "Le paramètre 1 de type... ne peut être converti en type chaine"

--
Francis MOREL
http://www.SoftProtect.fr
Posté le 21 février 2017 - 20:46
Dans mon idée, j'avais ceci dans la procédure appelante :

i est un entier
fff("i") // au lieu de fff(i) dans le programme 'classique'