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 :

Déclaration de nom de variable dynamiquement [WD17]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Points : 73
    Points
    73
    Par défaut Déclaration de nom de variable dynamiquement
    Bonjour,

    Je souhaiterais dans une boucle déclaré un nombre i de tableau différent.

    Il faut donc que je puisse changer dynamiquement le nom de mon tableau :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      tabMonTableau+i est un tableau de 20 entier
    Mais je ne trouve la bonne syntaxe.. Pouvez vous m'aider?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    regardes du côté des tableaux à plusieurs dimensions ... Ca devrait suffire si tu n'as trop de données à stocker.

    à bientôt,

    Nicolas

  3. #3
    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,

    Voyez l'indirection.

    Les opérateurs { et } permettent d'accéder à un champ, une variable, un membre d'une classe ou une rubrique de fichier en construisant dynamiquement le nom du champ, de la variable, du membre de la classe ou de la rubrique.

    L'intérêt des opérateurs { et } est multiple :

    Passer en paramètre un nom de champ, de variable, de membre d'une classe ou de rubrique.
    Construire le nom d'un champ, de la variable, d'un membre d'une classe ou d'une rubrique par programme.
    En espérant vous avoir aidé,

    Hemgé

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Bonjour,

    Voyez l'indirection.
    Bonne idée à la base, mais tu ne peux pas écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {tabMonTableau + "1",indVariable} est un tableau de 20 entiers
    Je pense qu'il vaut mieux utiliser l'idée de Nicolas... avec des tableaux dynamiques.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  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
    Tout à fait d'accord sur le fait que l'indirection ne peut être utilisée dans la déclaration d'une variable.

    La doc le précise dans les limitations
    Limitations
    L'opérateur d'indirection permet de retrouver un élément par son nom.

    Les opérations suivantes ne sont donc pas autorisées dans une indirection :

    accès à un membre d'une instance de classe ou de structure autre que l'instance de classe courante (opérateurs : et :: )
    accès à un sous-élément de champ ou de tableau (opérateur [ ] )
    accès à une sous-partie de chaîne (opérateur [[ ]] )
    accès à une propriété (opérateur ..)
    indirection (opérateur { } )
    appel de procédure ou de méthode d'objet Automation
    déclaration de variable
    En fait, ma réponse aurait pu être plus documentée : sauf erreur de ma part,
    • on ne peut pas déclarer dynamiquement une variable et donc, à la base, la demande de mazbap ne peut être rencontrée telle que ;
    • on ne peut pas non plus déclarer dynamiquement les dimensions d'un Tableau.


    Donc, même la solution du Tableau à plusieurs dimensions implique que l'on prédéfinisse le nombre de dimensions.
    Tant qu'à déclarer (préalablement) un tableau à plusieurs dimensions, on peut aussi déclarer (préalablement) plusieurs tableaux à une dimension, ce qui peut se révéler plus souple en terme d'exploitation.

    Une fois les tableaux "prédéclarés " suivant une dénomination numériquement indicée, l'indirection permet alors de les exploiter en construisant dynamiquement leur nom (en prenant effectivement soin d'utiliser la constante indVariable)

    Quant au Tableau dynamique,
    • la notion de "dynamique" ne porte jamais que sur la taille, sur le nombre d'éléments d'une dimension (NB : les Tableaux simples peuvent également être agrandis) ;
    • la notion de "dynamique" ne porte pas sur le nombre de dimensions et donc on ne rencontre pas non plus le souci de mazbap.


    Tout reste donc ouvert et tout dépend tant des besoins de la situation que de choix et/ou d'habitudes.

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Merci pour ton retour très documenté.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    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,
    On peut aussi déclarer une structure qui a pour membre un tableau dynamique, puis un tableau dynamique de cette structure.
    Ainsi il n'est pas nécessaire de "pré-déclarer" les tableaux (il suffit d'agrandir le tableau de structure), et chaque tableau possède sa propre dimension. Tout devient alors dynamique.

    Tatayo.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    On peut aussi déclarer une structure qui a pour membre un tableau dynamique, puis un tableau dynamique de cette structure.
    Ainsi il n'est pas nécessaire de "pré-déclarer" les tableaux (il suffit d'agrandir le tableau de structure), et chaque tableau possède sa propre dimension. Tout devient alors dynamique.

    Tatayo.

    J'utilise également cette méthode, mais pour ma part j'utilise des tableaux associatifs de structure pour accéder simplement à ma structure (extraction/modification/suppression)

  9. #9
    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,

    <Tableau dynamique de structures contenant un (ou des ?) Tableau(x) dynamique(s)>, de tatayo
    ou la variante Tableau associatif de structures contenant ... , de cladoo

    Et donc en cas de pluralité de tableaux du niveau le plus bas, chacun peut représenter un type de variable différent, ce qui est aussi un plus.

    Très intéressant et plus un code devient générique, mieux je le / me sens.
    Je ne visualise pas encore très bien, mais je vais creuser !

    Y a-t-il des limitations ou effets de bord particuliers ?

    Pourquoi Tableau dynamique et pas Tableau simple avec un facteur <Agrandissement> ?
    Je sais qu'on n'a pas de contrôle a posteriori sur le facteur <Agrandissement> tandis qu'on peut déclarer sans allouer un Tableau dynamique voire supprimer toutes les lignes pour repartir sur une plus petite allocation.
    Y aurait-il une autre raison ?

    Est-ce que cela ne devient pas lent avec les Tableaux associatifs ?

    Merci pour le concept et pour vos réponses

    Hemgé

  10. #10
    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
    Citation Envoyé par Hemgé Voir le message
    Et donc en cas de pluralité de tableaux du niveau le plus bas, chacun peut représenter un type de variable différent, ce qui est aussi un plus.
    Quand je dois manipuler des tableau d'éléments hétérogènes, j'ai l'habitude d'utiliser un tableau d'objets dynamiques.
    Je déclare une classe de base abstraite, avec des propriétés/méthode communes à tous les objets que je vais manipuler.
    Ensuite je déclare des classes qui héritent toutes de la classe de base, et qui surchargent les propriétés/méthodes.

    En utilisant le polymorphisme, je peux alors choisir le type d'objet que je vais ajouter dans le tableau, et le reste du code est totalement générique.

    Ca peut paraître un peu lourd à mettre en place à première vue, mais au final c'est très puissant.

    Tatayo.

  11. #11
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    La discussion est très intéressante mais je ne pense pas que mazbap ai besoin d'aller si loin..

    Pour ma part je ferais un truc du genre..
    Je déclare mon tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTab est un tableau de 1 par 1 entiers
    Puis je le dimensionne en fonction de i

    C'est à vérifier mais ainsi je pense que ça marche.
    Puis pour accéder à l'info que tu veux ça deviens un accès à un tableau à deux dimension.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  12. #12
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    C'est ce que je proposais en effet. Mais ça reste viable tant qu'on a un volume de données pas trop important et de même nature.

  13. #13
    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
    L'inconvénient, si c'en est un ici, d'un tableau à deux dimension par rapport à un tableau de tableaux est que le tableau à deux dimensions est forcément "carré".
    Dans le cas d'un tableau de tableaux, chaque tableau a sa dimension propre.

    Reste à voir quel est le besoin exact de mazbap sur ce point.

    Tatayo.

  14. #14
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    C'est sur qu'il y a plusieurs solutions avec leurs avantages et inconvénients..

    Mais pour ma part en lisant la question de mazbap (surtout son exemple) c'est de déclarer plusieurs variables tableaux de 20 entiers.

    C'est à mazbap de nous donner plus de détails sur son besoin réel.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Points : 73
    Points
    73
    Par défaut
    Merci à tous pour vos réponses et désolé de vous répondre si tard (je suis alternant et travaille seulement une semaine sur deux).

    La solution que j'ai programmer n'est vraiment pas très propre mais m'a permit de répondre à mes attentes :

    Je créé deux TABLES différentes, la première contient tous mes éléments, le deuxième elle est remplit lorsque certaines conditions son validées, puis vider une fois que le traitement est effectué. La deuxième table me permet donc d'éviter la déclaration de plusieurs tableaux dynamiquement.

    La solution la plus simple pour moi aurait été l'indirection mais comme tous le monde le sait maintenant cela ne permet de déclarer des nom de variable ou tableau dynamiquement.

    Merci a tous!

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

Discussions similaires

  1. [JSTL] nom de variable "dynamique"
    Par gmonta31 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2006, 13h31
  2. Nom de variable dynamique
    Par mavina dans le forum Linux
    Réponses: 7
    Dernier message: 26/04/2006, 20h48
  3. Réponses: 4
    Dernier message: 13/09/2005, 11h50
  4. Noms de Variables dynamiques
    Par horec dans le forum Langage
    Réponses: 7
    Dernier message: 22/07/2005, 16h47
  5. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44

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