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 sur un tableau de structure [WD16]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut Indirection sur un tableau de structure
    Bonjour,

    J'ai un tableau de structures sur lequel je fais une recherche sans utiliser les indirections et qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nPos = TableauCherche ( MonTableau, tcDichotomique, "nLigne", nLigne )
    SI nPos <> -1 ALORS
       Trace ( MonTableau [ nPos ] : MonMembre )
    FIN
    Le problème est que je dois utiliser les indirections sur la variable MonMembre mais là je bloque.

    Si je parcours le tableau de la façon suivante, j'arrive à récupérer l'information en utilisant l'indirection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaChaine = "MonMembre"
    POUR TOUT ELEMENT MaStructure DE MonTableau
        Trace ( { "MaStructure:" + Machaine } )
    FIN
    Par contre en utilisant un TableauCherche, je cale ! J'ai essayé pas mal de combinaisons mais sans succès. Je pense que je pourrais m'en sortir avec la compilation dynamique mais je ne souhaiterais l'utiliser qu'en dernier recours.

    Avez-vous une idée ?

    Si quelqu'un pouvait me mettre sur une piste ou me confirmer que ce n'est pas possible, ça m'aiderait bien ...

    Par avance merci


    Cordialement,
    Emmanuel Haefelé.

  2. #2
    Membre chevronné Avatar de jimmypage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 314
    Par défaut
    Bonjour,

    Si le parcours du tableau marche avec les indirections, je ne vois pas pourquoi cela est bloquant avec le TableauCherche ...

    Ceci ne marche pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableauCherche ( MonTableau, tcDichotomique, "MonMembre", "nLigne" )

  3. #3
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Par défaut
    Bonjour,

    Son problème est d'utiliser l'indice ensuite (pas vraiment de rapport avec TableauCherche).

    Si vous êtes vraiment en WD16, vous pouvez écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"tabMonTableau[42].MonMembre"}
    Sinon, en WD15 ou inférieur, je pense que vous êtes obligé de passer par une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE TraiteMembre(MaStruct)
    {"MaStruct.MonMembre", indVariable} = "Bobby"
    Trace({"MaStruct.MonMembre", indVariable})
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TraiteMembre(tabMonTableau[42])

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Bonjour Hibernatus34,

    Si vous êtes vraiment en WD16, vous pouvez écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {tabMonTableau[42].MonMembre}
    Je suis en 16 mais malheureusement ça ne fonctionne pas, j'ai fait différent tests sur votre exemple. Par contre dans mon exemple il faut utiliser MaChaine et non MonMembre.

    Sinon, en WD15 ou inférieur, je pense que vous êtes obligé de passer par
    une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE TraiteMembre(MaStruct)
    {"MaStruct.MonMembre", indVariable} = "Bobby"
    Trace({"MaStruct.MonMembre", indVariable})
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TraiteMembre(tabMonTableau[42])
    Alors ça par contre c'est vraiment très malin, je n'y aurais pas pensé et ça fonctionne parfaitement. Simplement une petite correction par rapport à mon exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROCEDURE TraiterMembre ( MaStructure, MaChaine )
     
    Trace("---> " + {"MaStructure:" +MaChaine })
     
    RETOUR
    Mais attention car bizarrement il ne faut pas mettre ', indVariable' car sinon ça ne passe pas. J'ai un message d'erreur comme quoi l'élément est inconnu.

    puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nPos = TableauCherche ( MonTableau, tcDichotomique, "nLigne", nLigne )
    SI nPos <> -1 ALORS
       TraiterMembre ( MonTableau [ nPos ], MaChaine )
    FIN
    Merci pour tout !

  5. #5
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Par défaut
    En fait, pour l'exemple en WD16, j'ai oublié les guillemets, mais je l'ai testé et ça marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"tabMonTableau[42].MonMembre"}
    Cette chaîne, vous pouvez la composer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"tabMonTableau[" + nPos + "]." + MaChaîne}
    Pour l'autre exemple (WD15), je l'ai testé en WD15 et WD16 avec le "indVariable" et je vous garantis que ça marche aussi.

    Autre chose, si WinDev souligne en vert votre paramètre (parce qu'il n'est utilisé que par indirection), rajoutez la mention "<utile>" à droite du paramètre.

    PS. Je viens de comprendre, il faut utiliser le "." et pas l'ancienne syntaxe ":" pour que ça fonctionne avec indVariable.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Citation Envoyé par Hibernatus34 Voir le message

    Cette chaîne, vous pouvez la composer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"tabMonTableau[" + nPos + "]." + MaChaîne}
    Ok, effectivement cette syntaxe fonctionne aussi, que ce soit d'ailleurs avec un '.' ou un ':'. Cependant si j'ajoute le indvariable j'ai le message d'erreur suivant : L'élément Montableau[2].MonMembre est inconnu.

    De mon côté je travaille dans une classe à laquelle on passe en paramètre le tableau et la structure, pour vous je suppose que ce n'est pas le cas. Peut-être est-ce la raison de cette erreur chez moi.

    Ca ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"MonTableau[" + nPos + "]." + MaChaîne}
    Ca non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"MonTableau[" + nPos + "]." + MaChaîne, indvariable}
    Autre chose, si WinDev souligne en vert votre paramètre (parce qu'il n'est utilisé que par indirection), rajoutez la mention "<utile>" à droite du paramètre.
    Alors ça aussi c'est génial ! Ca commençait vraiment à me fatiguer de désactiver le warning sur cette erreur que je retrouve à différent endroit dans mon code.

    Merci pour cette aide très précieuse !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/12/2014, 14h34
  2. [WD17] Indirection sur membre tableau de structure d'une classe
    Par cladoo dans le forum WinDev
    Réponses: 8
    Dernier message: 05/07/2012, 10h11
  3. Pointeur sur un tableau de structures
    Par klakman dans le forum Débuter
    Réponses: 7
    Dernier message: 28/09/2009, 11h06
  4. Réponses: 8
    Dernier message: 17/09/2008, 12h11
  5. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02

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