|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() |
Bonjour,
Le problème que je rencontre est le suivant : J'ai créé le fichier PARAMETRES suivant ... x.jpg A l'initialisation de mon programme, je déclare le nom de chaque variable globale comme suit : y.jpg Ensuite, je veux réaliser le chargement du nom de mes variables globales et leur contenu par le biais de cette procédure InitialisationProgramme Code :
z.jpg Je ne sais pas comment utiliser les indirections pour récupérer le nom de ces variables et y affecter leur contenu ! Je BUG...
__________________
La patience est d'or, l'aide est inestimable ... |
||
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : septembre 2008 Messages : 594 ![]() |
Bonsoir,
As-tu essayé avec la propriété ..Nom ? Du style : PARAMETRES.NomVariable..Nom ? |
|
|
00
|
|
|
#3 | |
|
Membre du Club
![]() |
Oui,
En remplacant {PARAMETRES.NomVariable} par {PARAMETRES.NomVariable..Nom} partout, çà plante Citation:
__________________
La patience est d'or, l'aide est inestimable ... |
|
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : septembre 2008 Messages : 594 ![]() |
Et comme ca : {PARAMETRES.NomVariable}..Nom ?
|
|
|
00
|
|
|
#5 | ||
|
Membre chevronné
![]() Inscription : octobre 2007 Messages : 320 ![]() |
Bonsoir,
Je n'ai pas consulté vos pièces jointes, mais pour ce qui est de l’indirection, l'aide est très claire et, dans ce cas précis des propriétés sur indirection, il y a des exemples adaptés. Voir les notes : Citation:
Citation:
Hemgé |
||
|
|
00
|
|
|
#6 | |
|
Membre confirmé
![]() Développeur informatique Inscription : mars 2009 Messages : 92 ![]() |
Bonsoir,
Qu'entendez-vous par : Citation:
![]() Vous devriez pouvoir le vérifier en mettant un STOP à la fin de votre code et en consultant les variables directement dans windev. |
|
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() |
Merci à vous,
J'ai déjà utilisé l'indirection dans la plupart des cas, mais là le cas est un peu plus complexe... x.jpg Si l'on regarde le résultat, 0 <TAB> Vrai, le 0 devrait correspondre au nom de la variable (lu dans le fichier PARAMETRES) et vrai sa valeur (lu dans le m^me fichier) Imaginons que j'ai dans le fichier PARAMETRES, 2 colonnes : NomVariable et ContenuVariable GAdminTout .... Vrai GafficheTout ... Faux J'ai aussi déclaré ces variables en global dans le code projet : GAdminTout et GafficheTout sont booleen Maintenant, je veux charger les valeurs lues du fichier dans ces variables... j'utilise ce code... Code :
{PARAMETRES.NomVariable} = PARAMETRES.ContenuVariable
GAdminTout = Vrai j'obtient en fait ... 0 = Vrai SINON, AUTRE SOLUTION PLUS LOURDE EN CODE et en accès fichier... Faire une recherche pour chaque variable de ce fichier... pas TOP Code :
Merci d'avance
__________________
La patience est d'or, l'aide est inestimable ... |
||
|
|
00
|
|
|
#8 | |||
|
Membre chevronné
![]() Inscription : octobre 2007 Messages : 320 ![]() |
Bonjour,
Je vous renvoie encore à l'Aide en ligne sur l'indirection. Vous y trouvez un exemple exact de ce que vous voulez faire, à savoir construire un nom de variable en associant une chaîne littérale ("PARAMETRES. ") et une variable texte (NomVariable), sauf que dans l'exemple, l'ordre des éléments est inversé. Citation:
Cet ensemble, accolades comprises, désigne un champ, une variable etc. Vous pouvez ensuite appliquer à ce champ, à cette variable les traitements ou propriétés etc que appliqueriez à un champ, variable etc "de base". Le .. des propriétés, les [] des indices doivent donc être en dehors des accolades et suivre l'accolade fermante (}), exactement comme ils suivraient le nom d'un champ ou d'une variable "de base". Donc, dans votre cas, étant entendu que "PARAMETRES." est une chaîne littérale et NomVariable une variable chaîne qui contient le nom de la variable à affecter, Citation:
Citation:
Hemgé |
|||
|
|
10
|
|
|
#9 | ||
|
Membre du Club
![]() |
Merci Hemgé pour ta réponse,
Cependant, j'ai déjà fait cet essai et je viens de le refaire... Code :
Pas encore çà ! Il faut que je tente d'autres écritures...
__________________
La patience est d'or, l'aide est inestimable ... |
||
|
|
00
|
|
|
#10 | ||
|
Membre confirmé
![]() Développeur informatique Inscription : mars 2009 Messages : 92 ![]() |
Bonjour,
Comme indiqué par Hemgé : Citation:
Mais encore une fois, votre code fonctionnait déjà : Citation:
Si ce n'est pas votre but alors je ne comprends pas ce que vous voulez faire ! |
||
|
|
00
|
|
|
#11 | ||||
|
Membre du Club
![]() |
Bien, il me semble effectivement qu'il y a incompréhension...
Je reprends pour expliquer mon souhait ! Dans un concept général, je déclarerai "2 pour simplifier" variables globales dans mon code projet (gbToutAdmin et gbToutAffiche) et leur affecterai une valeur à l'initialisation (Vrai par exemple). Code :
Code :
Dans un concept plus libérale, je déclare ces mêmes variables globales dans mon code projet mais au lancement du programme je vais aller lire le contenu de la colonne "nom de variable" du fichier PARAMETRES et y affecter le contenu de la colonne "valeur de la variable" correspondant du fichier PARAMETRES . RAPPEL, tous les noms de variables de la colonne "nom de variable" sont déclarés en global, dans le code projet bien sûr. VOILA... la redirection nécessite de réaliser 2 choses : 1°) lire le nom de la variable dans la colonne 1 2°) lire le contenu de la variable à lui affecter dans la colonne 2 //Déclaration code projet gbAfficheTout, gbToutAdmin est booleen //Je lis les 2 colonnes de mon fichier PARAMETRES NomDeVariable .... ContenuDeVariable gbAfficheTout .... Vrai gbToutAdmin .... Vrai // Le résultat dans mes variables globales devrait être : gbAfficheTout = Vrai gbToutAdmin = Vrai // Actuellement, le résultat est : 0 .... Vrai 0 .... Vrai C'est probablement un problème dans la syntaxe des indirections...
__________________
La patience est d'or, l'aide est inestimable ... |
||||
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 573 ![]() |
Bonjour,
Pourquoi ne pas remplacer les variables globales par un tableau associatif ? Ainsi plus de problème d'indirection... Tatayo. |
|
|
00
|
|
|
#13 |
|
Membre confirmé
![]() Développeur informatique Inscription : mars 2009 Messages : 92 ![]() |
A priori votre problème ne porte que sur les booléens, et en relisant votre code je constate que pour définir la valeur des booleén vous utilisez une chaine :
Code :
{"PARAMETRES." + NomVariable} = PARAMETRES.ContenuVariable="Faux" ? "Faux" SINON "Vrai"
Code :
{"PARAMETRES." + NomVariable} = PARAMETRES.ContenuVariable="Faux" ? Faux SINON Vrai
|
|
|
00
|
|
|
#14 | |||
|
Membre chevronné
![]() Inscription : octobre 2007 Messages : 320 ![]() |
Bonjour et bonne année !
Comme le soulignait themayu : Citation:
J'avais signalé ne pas avoir consulté vos pièces jointes dans mon premier post. A leur lecture, il apparaît que NomVariable est une rubrique de votre fichier PARAMETRES et il n'y a donc pas lieu de définir une variable NomVariable comme évoqué. Désolé. Normalement l'indirection {PARAMETRES.NomVariable} est correcte puisque NomVariable est à l'évidence une rubrique de type chaîne. (l'expression entre accolades doit être une chaîne). Par ailleurs, il faut élaguer votre code qui est beaucoup trop indirect et compliqué : - l'affectation Choix est entier = 0 doit venir juste après la déclaration d'ouverture de votre routine et pas être répétée à chaque boucle; - dans la boucle, Choix est entier = 0 doit devenir Choix - mais, in fine, il est inutile de passer par Choix et vous pouvez tester d'emblée PARAMETRES.typeVariable dans une instruction Selon/Cas - les si imbriqués que vous avez utilisés auraient pu être avantageusement remplacés par une instruction Selon/Cas, mais cette partie est inutile comme écrit juste au-dessus. - en fin de cette série de Si, il ne fallait plus remettre Choix à 0, puisque vous le mettiez à 0 avant d'entrer dans vos tests et que par défaut, sauf si une condition était rencontrée et le modifiait (1 à 3), il restait à 0, sa valeur initiale, attribuée avant d'entrer dans les tests. - enfin, dans l'Indirection, il est conseillé de spécifier le type de l'élément en utilisant les constantes indXXX. Voir l'aide. Le code ci-après est plus concis et plus clair. Il s'exécutera plus vite. Code :
Hemgé PS : je vois à l'instant que vous avez posté un nouveau message. J'éditerai celui-ci si nécessaire. |
|||
|
|
00
|
|
|
#15 | ||
|
Membre du Club
![]() |
Merci à vous,
Après simplification et correction apportée sur la condition "False" qui me servait de test et donc ne marchait pas, le chargement du contenu et l'affectation respective à chacune des variables globales s'effectue correctement maintenant. Code :
Trace ({sNomVariableLuFichier}, m'affiche le contenu de la variable et pas le nom de la variable lui même. Quelle est la syntaxe ? Trace ({sNomVariableLuFichier}.nom, ou autre ....
__________________
La patience est d'or, l'aide est inestimable ... |
||
|
|
00
|
|
|
#16 |
|
Membre confirmé
![]() Développeur informatique Inscription : mars 2009 Messages : 92 ![]() |
Tout simplement sans les accolades :
|
|
|
00
|
|
|
#17 |
|
Membre du Club
![]() |
Plus bêta ... y a pas !
La brume alcoolisée des fêtes va se dissiper ... je l'espère. Merci encore à tous,
__________________
La patience est d'or, l'aide est inestimable ... |
|
|
00
|
|
|
#18 | ||
|
Membre chevronné
![]() Inscription : octobre 2007 Messages : 320 ![]() |
Bonjour,
Ravi que cela fonctionne. Code :
D'une part, ce serait intéressant de connaître le fond de l'histoire. D'autre part et surtout, l'utilisation de sNomVariableLuFichier me semble superflue et inutile. Vous utilisez les rubriques typeVariable et ContenuVariable en direct, pourquoi pas la rubrique NomVariable ? Enfin, toujours dans l'idée d'optimiser votre code, vous n'utilisez pas la constante indXXX spécifiant le type d'élément recherché (indRubrique en l’occurrence), comme suggéré. Voir l'aide sur l'indirection, au point Indirection en spécifiant le type de l'élément (optimise la vitesse d'exécution) Ceci permet à Windev de connaître la collection dans laquelle il doit chercher l'élément sur lequel vous travaillez, au lieu de parcourir systématiquement toutes ses collections d'identifiants. Hemgé |
||
|
|
00
|
|
|
#19 | ||
|
Membre du Club
![]() |
Excuses Hemgé, j'étais passé sur un autre problème...
Citation:
Citation:
A suivre, merci pour tes conseils
__________________
La patience est d'or, l'aide est inestimable ... |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com