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 :

Un tableau de tableau ? [WD15]


Sujet :

WinDev

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut Un tableau de tableau ?
    Bonjour,

    avec Windev il est possible de faire une structure de structure.
    Est-il possible de faire un tableau de tableau ?
    Si oui j'ai pas réussi à trouver comment faire...
    Mieux vaut un petit lien qu'un long discours.

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

    Oui on peut voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    STR_Adresse est une structure
    	Rue est une chaîne
    	Numéro est une chaîne
    	Ville est une chaîne
    FIN
     
    STR_Contact est une structure
    	Nom est une chaîne
    	Prénom est une chaîne
    	Tab_Adresse est tableau de STR_Adresse
    FIN
    Tab_Contact est tableau de STR_Contact
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Non ça c'est un tableau de structure.
    Ce que je veux c'est un tableau de tableau et avoir une syntaxe du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tableau1[n1].tableau2[n2]
    Le problème des structures c'est que c'est quelque chose de défini à l'avance. Dans le code on est obligé de définir un nombre fini de structure au contraire d'un tableau dynamique. Mais même en étant dynamique il faut toujours redimensionner le tableau
    Pas encore gagné l'encapsulation avec Windev.
    Mieux vaut un petit lien qu'un long discours.

  4. #4
    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
    ton exemple est un tableau à deux dimensions
    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

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 200
    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 200
    Points : 12 776
    Points
    12 776
    Par défaut
    Citation Envoyé par sphynxounet Voir le message
    Non ça c'est un tableau de structure.
    Ce que je veux c'est un tableau de tableau et avoir une syntaxe du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tableau1[n1].tableau2[n2]
    Le problème des structures c'est que c'est quelque chose de défini à l'avance. Dans le code on est obligé de définir un nombre fini de structure au contraire d'un tableau dynamique. Mais même en étant dynamique il faut toujours redimensionner le tableau
    Pas encore gagné l'encapsulation avec Windev.
    Bonjour,
    Tu peux toujours avoir un tableau dynamique dans ta structure.
    Je l'ai fait avec des classes (un tableau dynamique d'objets, dont l'une des propriétés (voir deux dans certains cas) est un tableau dynamique... d'objets).
    Je peux donc faire clObjet[1]:Membre[1]:valeur, si tant est que le membre soit publique.

    Tatayo.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Oui car il y a une chose que je n'ai pas précisé.
    Un tableau à n dimensions est constitué du même type d'éléments. Si je fais un tableau de n*n dimensions, à l'indice [n1,n2] j'aurais un élément et à un indice [n3,n4] j'aurais toujours le même type d'élément, et ce finalement peu importe le nombre de dimensions du tableau.

    L'avantage d'un tableau de tableau est que chaque tableau enfant peut contenir des types différents. En gros c'est un peu une représentation d'une table de BDD où on a des lignes qui sont référencées par l'ID et des colonnes qui peuvent contenir chacune des informations complètement différentes.
    Mieux vaut un petit lien qu'un long discours.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 200
    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 200
    Points : 12 776
    Points
    12 776
    Par défaut
    Tu te contredis dans ton explication.
    Dans un tableau à n dimension contient le même type de données. Donc un tableau à 1 dimension contient 1 seul type de tableau, qui ne contient qu'un type de donnée. Donc ton tableau de tableau ne contient au final qu'un type de données.

    Pour reprendre ton analogie avec la base de données, on se rapproche plus d'un tableau de structure que d'un tableau de tableau.

    Tatayo.

  8. #8
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    C'est pas à ce genre de chose que servent les Variants ?
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Tu te contredis dans ton explication.
    Dans un tableau à n dimension contient le même type de données. Donc un tableau à 1 dimension contient 1 seul type de tableau, qui ne contient qu'un type de donnée. Donc ton tableau de tableau ne contient au final qu'un type de données.

    Pour reprendre ton analogie avec la base de données, on se rapproche plus d'un tableau de structure que d'un tableau de tableau.

    Tatayo.
    J'ai jamais dit que tableau1[1].tableau2[1] contenait le même type de données que tableau1[1].tableau2[2].

    On peut faire une structure d'une structure d'une structure à l'infini oui, mais une structure n'est pas dynamique.
    J'essaye de déclarer une structure avec un tableau dynamique de type d'une autre structure mais sans grand succès.
    Mieux vaut un petit lien qu'un long discours.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Ah bah si je sais pas pourquoi en mettant un tableau dynamique dans une structure ça fonctionne (enfin d'un point de vue syntaxique).

    En gros je fais :

    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
     
    Structure1 est une structure
       a est un réel
       b est un entier
    FIN
     
    Structure2 est une structure
       tab_structure1 est un tableau dynamique de Structure1
       c est un réel
    FIN
     
    Structure3 est une structure
       tab_structure2 est un tableau dynamique de Structure2
       d est un entier
    FIN
     
    MonsuperTableau est un tableau dynamique de Structure3
    Du coup je peux appeler comme je le voulais MonsuperTableau[1].tab_structure2[1].tab_Structure1[1].a

    Et dans chaque tableau je peux avoir le type de tableau que je veux.
    C'est pour moi (mais c'est surement un point de vue très personnel) plus proche de la programmation orientée objet.
    Mieux vaut un petit lien qu'un long discours.

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Citation Envoyé par mogwai162 Voir le message
    C'est pas à ce genre de chose que servent les Variants ?
    La réponse de mogwai162 est pleine de promesses...
    Elle aurait aurait bien mérité d'être un peu plus détaillée.

    Dans le WLangage, le type Variant n'est pas un type universel capable "d'encapsuler" n'importe quel type de données.
    cf. la documentation en ligne: Le type Variant (Type de variable)

    Jusqu'en version 12 (et je crois aussi 14), il n'est pas possible de placer dans un Variant une donnée de type Tableau, Tableau associatif ou Structure.

    En WD12, le code ci-dessous compile sans erreur mais provoque une erreur à l'exécution:
    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
    PROCEDURE Test_TableauVariant()
     
    StructureNombre est une structure
        i est un réel
        j est un entier
    FIN
     
    v est un Variant
    d est une Date
    tVariant est un tableau de 0 Variant
    tEntier est un tableau de 0 entier
    tStructure est un StructureNombre
     
    d  = DateSys()
    tEntier = [1, 2, 3]
    tVariant = ["a", 1, 5.3, d, tStructure, tEntier]
     
    POUR TOUT ELEMENT v DE tVariant
        Trace(v, v..Type)
    FIN
    En revanche, la version 15 nous annonce ceci:
    Citation Envoyé par Brochure WX15

    83 _ _ nouveauté WD WB WM

    Variant: tableaux, classes,...

    Un Variant accepte des variables de type tableau, classe, structure.

    Gain apporté par cette nouveauté version 15:
    Utile en Automation, en fonction du type d’informations retournées.
    Donc, avec WD15 on devrait pouvoir utiliser des tableaux de Variant qui contiennent des tableaux de Variant (ou tout autre type supporté), etc..

    Est-ce qu'un heureux possesseur de WD15 pourrait nous dire si le code ci-dessus fonctionne correctement ?

    Merci, par avance.
    _

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Je pourrais toujours essayer demain.
    C'est sur que ça pourrait être plus simple même si au final j'ai quand même réussi à tout faire (déclaration, remplissage des tableaux et lecture dans une boucle).
    A la base c'est pour faire le dernier tuto OpenGL de Nehe en windev. (me reste à régler les problèmes de mouvements de la caméra en translation).
    Mieux vaut un petit lien qu'un long discours.

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par sphynxounet Voir le message
    A la base c'est pour faire le dernier tuto OpenGL de Nehe en windev.
    C'est un super travail !

    Mais dans ce cas, pour rester compatible avec le plus grand nombre, je te recommanderais de ne pas utiliser les tableaux de Variant.

    _

  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    C'est un super travail !

    Mais dans ce cas, pour rester compatible avec le plus grand nombre, je te recommanderai de ne pas utiliser les tableaux de Variant.

    _
    Et même plus, "pour rester propre", évitons les variants autant que faire se peut.

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par vmolines Voir le message
    Et même plus, "pour rester propre", évitons les variants autant que faire se peut.
    vmolines, comme d'autres vont lire ton message, je me permets de dire que je ne suis pas de ton avis et que le type Variant a son utilité (même en dehors du cadre de l'automation).
    _

  16. #16
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Bonjour,

    vmolines, comme d'autres vont lire ton message, je me permets de dire que je ne suis pas de ton avis et que le type Variant a son utilité (même en dehors du cadre de l'automation).
    _
    Pourquoi pas. Mais il serait intéressant de préciser dans quels cas tu es forcé d'avoir recours aux variants. Cela afin de bien faire la distinction avec une bonne utilisation d'une mauvaise.

    Ca vaut ce que ça vaut mais je ne m'en suis pas servi ces 6 derniers mois de développement (et sûrement plus encore).

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par PC SOFT
    Le type Variant permet de :

    * stocker n'importe quelle valeur de type simple : booléen, numérique (Monétaire, réel sur 8 octets, Entier signé sur 4 octets), caractères et chaîne de caractères, date (Date, Heure, DateHeure et Durée).
    * stocker des valeurs correspondant à des types avancés (variables de type gglxxx, xlsxx, rssxxx).
    * stocker des classes.
    * stocker des interactions avec les objets ActiveX et la programmation Automation.
    * manipuler la valeur NULL dans le WLangage.
    Ce que je fais dans mon programme c'est que je stocke des tableaux (au travers de structures). Je n'ai pas l'impression que les tableaux soient pris en compte avec les variants, on ne peut y stocker que certains types d'objets.
    Mieux vaut un petit lien qu'un long discours.

  18. #18
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Il m'arrive de répondre à des posts sans trop savoir de quoi je parle c'est pour ça aussi que je terminais le mien avec un ? je pense que ça peut aider tout de même en donnant une piste de recherche.

    Au vu de la doc, il est clair qu'avant la 14 c'est impossible et depuis la 15 il faut tester.
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par mogwai162 Voir le message
    Il m'arrive de répondre à des posts sans trop savoir de quoi je parle c'est pour ça aussi que je terminais le mien avec un ? je pense que ça peut aider tout de même en donnant une piste de recherche.

    Au vu de la doc, il est clair qu'avant la 14 c'est impossible et depuis la 15 il faut tester.
    Ne t'inquiètes pas petit Xelor, c'est toujours appréciable de l'aide. Si j'ai un reproche à faire c'est plutôt à PC Soft car ils balancent un nouveau type de variable mais bon pour moi c'est une variable hybride.
    En faite c'est une pseudo variable objet mais on ne peut pas y stocker n'importe quoi non plus.
    J'essaierai quand même histoire de voir de quoi il retourne (genre si on peut stocker des fichiers excel et y accéder par un tableau de variant, ça ça peut être pratique).
    Mieux vaut un petit lien qu'un long discours.

  20. #20
    Membre averti

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2010
    Messages : 125
    Points : 399
    Points
    399
    Par défaut
    Pour info le code suivant en v15 (placé sauvagement en déclaration globales d'une fenêtre de test):

    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
    StructureNombre est une structure
    	i est un réel
    	j est un entier
    FIN
     
    v est un Variant
    d est une Date
    tVariant est un tableau de 0 Variant
    tEntier est un tableau de 0 entier
    tStructure est un StructureNombre
     
    d  = DateSys()
    tEntier = [1, 2, 3]
    tVariant = ["a", 1, 5.3, d, tStructure, tEntier]
     
    POUR TOUT ELEMENT v DE tVariant
    	Trace(v, v..Type)
    FIN
    provoque une erreur au niveau déjà de l'éditeur concernant la boucle de parcours POUR TOUT. (utilisation d'une variable globale interdite pour le parcours POUR TOUT)

    Modification :
    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
    StructureNombre est une structure
    	i est un réel
    	j est un entier
    FIN
     
    d est une Date
    tVariant est un tableau de 0 Variant
    tEntier est un tableau de 0 entier
    tStructure est un StructureNombre
    LOCAL
    	v est un Variant
     
    d  = DateSys()
    tEntier = [1, 2, 3]
    tVariant = ["a", 1, 5.3, d, tStructure, tEntier]
     
    POUR TOUT ELEMENT v DE tVariant
    	Trace(v, v..Type)
    FIN
    Plus de problème de compilation mais à l'exécution, la trace se plante sur la conversion du contenu du tableau en chaine (pour l'affichage dans la fenêtre de trace)

    Le problème vient du type variant qui selon son contenu ne peut être réaffecté vers une chaine (en l'occurence quand il veut afficher tStructure) pour l'affichage de la fenêtre de trace.
    Mais cela n'invalide pas le fait que le code fonctionne parfaitement; il faut simplement contrôler les données avant de les traiter pour éviter des erreurs de traitement.

    Cordialement

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

Discussions similaires

  1. [Tableaux] un tableau de tableau ??
    Par hitchie dans le forum Langage
    Réponses: 13
    Dernier message: 24/01/2006, 16h35
  2. Problème avec un tableau de tableau
    Par SubZero2 dans le forum Langage
    Réponses: 4
    Dernier message: 07/12/2005, 15h25
  3. [Tableaux] tableau de tableau
    Par Kerod dans le forum Langage
    Réponses: 4
    Dernier message: 26/11/2005, 19h30
  4. Réponses: 21
    Dernier message: 21/11/2005, 09h52
  5. [langage] Probleme de tri d'un tableau de tableau
    Par Ludo167 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2004, 10h32

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