IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Indirection variable globale [WD16]


Sujet :

WinDev

  1. #1
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut Indirection variable globale
    Bonjour,

    Le problème que je rencontre est le suivant :

    J'ai créé le fichier PARAMETRES suivant ...
    Nom : x.jpg
Affichages : 1367
Taille : 41,2 Ko

    A l'initialisation de mon programme, je déclare le nom de chaque variable globale comme suit :
    Nom : y.jpg
Affichages : 1437
Taille : 19,5 Ko

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    // Initialisation des variables globales déclarées dans le code du projet
    PROCEDURE InitialisationVariablesGlobales()
     
    // Chargement des noms de chaque variable et leur valeur respective à partir du fichier "PARAMETRES"
     
    HLitPremier(PARAMETRES,NomVariable)
    TANTQUE PAS HEnDehors(PARAMETRES)
     
    	Choix est entier = 0
    	SI PARAMETRES.typeVariable = "Numérique" THEN 
    		Choix = 2
    	SINON	SI PARAMETRES.typeVariable = "Texte" THEN 
    		Choix = 3
    	SINON SI PARAMETRES.typeVariable = "Booléen" THEN 
    		Choix = 1
    	SINON
    		Choix = 0
    	FIN
     
    	// Traitement selon le type de la variable
    	SELON Choix
    		CAS 3	// Texte
    			{PARAMETRES.NomVariable} = PARAMETRES.ContenuVariable
    		CAS 2	// Numérique
    			{PARAMETRES.NomVariable} = Val(PARAMETRES.ContenuVariable)
    		CAS 1	// Booléen
    			{PARAMETRES.NomVariable} = PARAMETRES.ContenuVariable="Faux" ? "Faux" SINON "Vrai"
    		AUTRE CAS
    			Info ("Cas non défini") 	
    	FIN
     
     	Trace (PARAMETRES.NomVariable,TAB,PARAMETRES.ContenuVariable,TAB,TAB,{PARAMETRES.NomVariable}))
     
    	HLitSuivant(PARAMETRES, NomVariable)
     
    FIN
    Voilà le résultat qui n'est pas satisfaisant car je n'est pas affecté les valeurs dans mes variables globales ...
    Nom : z.jpg
Affichages : 1353
Taille : 35,6 Ko

    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 ...

  2. #2
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Bonsoir,

    As-tu essayé avec la propriété ..Nom ?

    Du style : PARAMETRES.NomVariable..Nom ?

  3. #3
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Oui,

    En remplacant {PARAMETRES.NomVariable} par {PARAMETRES.NomVariable..Nom} partout, çà plante

    rreur à la ligne 26 du traitement Procédure globale InitialisationVariablesGlobales.
    L'élément 'NomVariable' est inconnu.

    ----- Informations techniques -----

    Projet : Instrument

    Appel WL :
    Traitement de 'Procédure globale InitialisationVariablesGlobales' (InitialisationProgramme.InitialisationVariablesGlobales), ligne 26, thread 0

    Que s'est-il passé ?
    L'élément 'NomVariable' est inconnu.
    La patience est d'or, l'aide est inestimable ...

  4. #4
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Et comme ca : {PARAMETRES.NomVariable}..Nom ?

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    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 :
    Quand utiliser l'indirection ?

    L'indirection peut être utilisée par exemple :
    ...
    Pour utiliser une propriété :
    {s_NomChamp}..Hauteur = 10
    De même, dans les remarques, il est précisé :
    Remarques :
    Les opérateurs d'accès sur un élément (opérateurs : et [ ] et [[ ]] et .. ) peuvent être utilisés sur l'élément obtenu par indirection. Quelques exemples :
    { <indirection> } : membre

    { <indirection> } [ indice ]

    { <indirection> } [[ indice ]]

    { <indirection> }..propriété
    J'espère que cela vous sera utile.

    Hemgé

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonsoir,

    Qu'entendez-vous par :
    Voilà le résultat qui n'est pas satisfaisant car je n'est pas affecté les valeurs dans mes variables globales ...
    Quand on regarde la capture d'écran de votre trace, le 4ème champ, le contenu de votre variable globale, est systématiquement égal à votre 2ème champ, la valeur définie dans le fichier ! Votre procédure fonctionne donc correctement en l'état !

    Vous devriez pouvoir le vérifier en mettant un STOP à la fin de votre code et en consultant les variables directement dans windev.

  7. #7
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Merci à vous,

    J'ai déjà utilisé l'indirection dans la plupart des cas, mais là le cas est un peu plus complexe...

    Nom : x.jpg
Affichages : 1235
Taille : 22,8 Ko

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    {PARAMETRES.NomVariable} = PARAMETRES.ContenuVariable
    Le problème est que je ne sais pas syntaxer {PARAMETRES.NomVariable} pour obtenir en final

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HLitRecherchePremier(PARAMETRES,NomVariable,"GbAdminTout")
    SI HTrouve()=Vrai ALORS
    	GbAdminTout = PARAMETRES.ContenuVariable
    FIN
     
    HLitRecherchePremier(PARAMETRES,NomVariable,"gnPersonneEncours")
    SI HTrouve()=Vrai ALORS
    	gnPersonneEncours = Val(PARAMETRES.ContenuVariable)
    FIN
    Hors de l'aide fournie, si quelqu'un connait la syntaxe acceptable !
    Merci d'avance
    La patience est d'or, l'aide est inestimable ...

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    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é.

    // Indirection avec un nom de fichier dans une variable
    nNomFic est une chaîne = "Client"
    {nNomFic + ".Nom"} = "Durand"
    HAjoute({nNomFic})
    Le principe à retenir avec les indirections est que vous construisez (concaténation etc.) votre chaîne résultat comme à l'accoutumée et que vous placez le tout entre accolades {ouvrante , puis fermante}.
    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,
    {PARAMETRES.NomVariable} = PARAMETRES.ContenuVariable
    doit devenir
    {"PARAMETRES." + NomVariable} = PARAMETRES.ContenuVariable
    Bon week-end

    Hemgé

  9. #9
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Merci Hemgé pour ta réponse,

    Cependant, j'ai déjà fait cet essai et je viens de le refaire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    // Chargement des noms de chaque variable et leur valeur à partir du fichier "PARAMETRES"
    HLitPremier(PARAMETRES,NomVariable)
    TANTQUE PAS HEnDehors(PARAMETRES)
     
    	Choix est entier = 0
    	SI PARAMETRES.typeVariable = "Numérique" THEN 
    		Choix = 2
    	SINON	SI PARAMETRES.typeVariable = "Texte" THEN 
    		Choix = 3
    	SINON SI PARAMETRES.typeVariable = "Booléen" THEN 
    		Choix = 1
    	SINON
    		Choix = 0
    	FIN
     
    	// Traitement selon le type de la variable
    	SELON Choix
    		CAS 3	// Texte
    			{"PARAMETRES." + NomVariable} = PARAMETRES.ContenuVariable
    		CAS 2	// Numérique
    			{"PARAMETRES." + NomVariable} = Val(PARAMETRES.ContenuVariable)
    		CAS 1	// Booléen
    			{"PARAMETRES." + NomVariable} = PARAMETRES.ContenuVariable="Faux" ? "Faux" SINON "Vrai"
    		AUTRE CAS
    			Info ("Cas non défini") 	
    	FIN
     
     	Trace ({"PARAMETRES." + NomVariable},TAB,PARAMETRES.ContenuVariable)
     
    	HLitSuivant(PARAMETRES, NomVariable)
     
    FIN
    le message d'erreur "Identificateur NomVariable inconnu ou inaccessible" s'affiche sur les 4 déclarations {"PARAMETRES." + NomVariable}

    Pas encore çà ! Il faut que je tente d'autres écritures...
    La patience est d'or, l'aide est inestimable ...

  10. #10
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    Comme indiqué par Hemgé :

    Citation Envoyé par Hemgé Voir le message
    Bonjour,

    ...

    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
    Il manque quelque part dans votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomVariable est une chaîne = ....
    Mais encore une fois, votre code fonctionnait déjà :

    {PARAMETRES.NomVariable} = PARAMETRES.ContenuVariable
    Dans le cas de votre première ligne dans votre base de donnée, ce code va bien affecter la valeur "G:\CHAMPION...." dans la variable "gsCheminPdf"

    Si ce n'est pas votre but alors je ne comprends pas ce que vous voulez faire !

  11. #11
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Déclaration des variables globales utiles au lancement du programme
    gbAdminTout est un booléen = vrai
    gbAfficheTout est un booléen = vrai
    C'est valeurs sont figées à chaque lancement de programme... Si je veux tenir compte d'une évolution à la fermeture et ensuite à la réouverture (GbAdminTout = Faux par exemple), je vais enregistrer le changement de ces variables dans un fichier, pour ensuite les relire au nouveau lancement de programme avec ce code. Ca FONCTIONNE très bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HLitRecherchePremier(PARAMETRES,NomVariable,"gbAdminTout")
    SI HTrouve()=Vrai ALORS
    	gbAdminTout = PARAMETRES.ContenuVariable="Faux" ? Faux SINON Vrai
    FIN
     
    HLitRecherchePremier(PARAMETRES,NomVariable,"gbAfficheTout")
    SI HTrouve()=Vrai ALORS
    	gbAfficheTout = PARAMETRES.ContenuVariable="Faux" ? Faux SINON Vrai
    FIN
    Par contre, si j'ai 1000 paramètres à lire, je vais devoir faire 1000 recherche puis chargement ce qui me parait être non optimum...



    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 ...

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pourquoi ne pas remplacer les variables globales par un tableau associatif ?

    Ainsi plus de problème d'indirection...

    Tatayo.

  13. #13
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    {"PARAMETRES." + NomVariable} = PARAMETRES.ContenuVariable="Faux" ? "Faux" SINON "Vrai"
    L'évaluation d'une chaîne vous renverra systématiquement faux, retirez simplement les " :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"PARAMETRES." + NomVariable} = PARAMETRES.ContenuVariable="Faux" ? Faux SINON Vrai

  14. #14
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour et bonne année !

    Comme le soulignait themayu :

    Mais encore une fois, votre code fonctionnait déjà :

    Citation:
    {PARAMETRES.NomVariable} = PARAMETRES.ContenuVariable
    Dans le cas de votre première ligne dans votre base de donnée, ce code va bien affecter la valeur "G:\CHAMPION...." dans la variable "gsCheminPdf"
    Effectivement, le résultat sur Trace semblait correct.

    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 est entier = 0
    - 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // Chargement des noms de chaque variable et leur valeur à partir du fichier "PARAMETRES"
    
    HLitPremier(PARAMETRES,NomVariable)
    
    TANTQUE PAS HEnDehors(PARAMETRES)	
    	
    	// Traitement selon le type de la variable
    	SELON PARAMETRES.typeVariable
    		CAS "Texte"	
    			{PARAMETRES.NomVariable, IndVariable} = PARAMETRES.ContenuVariable
    		CAS "Numérique" 
    			{PARAMETRES.NomVariable, IndVariable} = Val(PARAMETRES.ContenuVariable)
    		CAS "Booléen" 
    			{PARAMETRES.NomVariable, IndVariable} = PARAMETRES.ContenuVariable="Faux" ? "Faux" SINON "Vrai"
    			{PARAMETRES.NomVariable, IndVariable} = PARAMETRES.ContenuVariable="Faux" ? Faux SINON Vrai //EDIT : selon la remarque de themayu
    
    		AUTRE CAS
    			Info ("Cas non défini") 	
    	FIN
    
     	Trace ({PARAMETRES.NomVariable, IndVariable},TAB,PARAMETRES.ContenuVariable)
    		
    	HLitSuivant(PARAMETRES, NomVariable)
    	
    FIN
    Je pense que cela devrait fonctionner comme souhaité.

    Hemgé

    PS : je vois à l'instant que vous avez posté un nouveau message.
    J'éditerai celui-ci si nécessaire.

  15. #15
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    // Initialisation des variables globales déclarées dans le code du projet
    PROCEDURE InitialisationVariablesGlobales()
     
    sNomVariableLuFichier est un chaîne
     
    // Chargement des noms de chaques variables globales (déclarées préalablement) ainsi que leur valeur respective à partir du fichier "PARAMETRES"
    HLitPremier(PARAMETRES,NomVariable)
    TANTQUE PAS HEnDehors(PARAMETRES)
     
    	sNomVariableLuFichier = PARAMETRES.NomVariable
     
    	// Traitement selon le type de la variable
    	SELON PARAMETRES.typeVariable
     
    		CAS "Texte"
    			{sNomVariableLuFichier} = PARAMETRES.ContenuVariable
     
    		CAS "Numérique"
    			{sNomVariableLuFichier} = Val(PARAMETRES.ContenuVariable)
     
    		CAS "Booléen"
    			{sNomVariableLuFichier} = PARAMETRES.ContenuVariable="Faux" ? Faux SINON Vrai
     
    		AUTRE CAS
    			Info ("Cas non défini") 	
    	FIN
     
     	Trace ({sNomVariableLuFichier},TAB,PARAMETRES.ContenuVariable)
     
    	HLitSuivant(PARAMETRES, NomVariable)
     
    FIN
    Une question complémentaire, dans Trace...

    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 ...

  16. #16
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Tout simplement sans les accolades :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trace(sNomVariableLuFichier)

  17. #17
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    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 ...

  18. #18
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Ravi que cela fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	sNomVariableLuFichier = PARAMETRES.NomVariable
     
    	// Traitement selon le type de la variable
    	SELON PARAMETRES.typeVariable
     
    		CAS "Texte"
    			{sNomVariableLuFichier} = PARAMETRES.ContenuVariable
    Avez-vous essayé avec PARAMETRES.NomVariable comme je vous l'avais suggéré ?
    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é

  19. #19
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Excuses Hemgé, j'étais passé sur un autre problème...

    Avez-vous essayé avec PARAMETRES.NomVariable comme je vous l'avais suggéré ?
    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 ?
    sNomVariableLuFichier était plus pour la lisibilité et donc transitoire afin de m'éviter de modifier à chaque fois 3 ou 4 chaines dans le programme. Je l'ai donc modifié dans mon programme comme conseillé... merci


    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.
    Je n'ai pas bien compris l'intérêt de indxxx dans mon cas, il faut que je regarde à quoi celà correspond en effet.

    A suivre, merci pour tes conseils
    La patience est d'or, l'aide est inestimable ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variable globale / Propriété des threads
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 03/10/2003, 10h49
  2. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo