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...
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...
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
Non ça c'est un tableau de structure.
Ce que je veux c'est un tableau de tableau et avoir une syntaxe du genre :
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tableau1[n1].tableau2[n2]
Pas encore gagné l'encapsulation avec Windev.
ton exemple est un tableau à deux dimensions
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.
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.
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.
C'est pas à ce genre de chose que servent les Variants ?
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.
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 :
Du coup je peux appeler comme je le voulais MonsuperTableau[1].tab_structure2[1].tab_Structure1[1].a
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
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.
Bonjour,
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:
En revanche, la version 15 nous annonce ceci:
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
Donc, avec WD15 on devrait pouvoir utiliser des tableaux de Variant qui contiennent des tableaux de Variant (ou tout autre type supporté), etc..Envoyé par Brochure WX15
Est-ce qu'un heureux possesseur de WD15 pourrait nous dire si le code ci-dessus fonctionne correctement ?
Merci, par avance.
_
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).
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).
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.Envoyé par PC SOFT
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).
Pour info le code suivant en v15 (placé sauvagement en déclaration globales d'une fenêtre de test):
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)
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
Modification :
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)
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
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
Partager