PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Trie d'un tableau dynamique de type structure
Trie d'un tableau dynamique de type structure
Débuté par devwds, 18 mai 2012 10:28 - 10 réponses
Posté le 18 mai 2012 - 10:28
Bonjour,
Je remplie un tableau dynamique de structure

IntervalRes est une structure
x est un entier
y est un entier
z est un entier
FIN

Resultat est un tableau dynamique de IntervalRes

mais quand j'tilise la fonction TABEAUTRIE j'ai le message d'erreur :

Les tris ne peuvent s'effectuer que sur des éléments de type simple (entier, chaîne, ...).

Je veux faire le tri par les x ?
Posté le 18 mai 2012 - 12:35
Bonjour,
L'aide en ligne de Tableautrie te donne 2 méthodes pour trier un tableau de
structure...

Frédéric.

"Testeur" a écrit dans le message de groupe de discussion :
30cf707bba82a08484cebf96cc8f3db2@news.pcsoft...


Bonjour,
Je remplie un tableau dynamique de structure

IntervalRes est une structure
x est un entier
y est un entier
z est un entier
FIN

Resultat est un tableau dynamique de IntervalRes

mais quand j'tilise la fonction TABEAUTRIE j'ai le message d'erreur :

Les tris ne peuvent s'effectuer que sur des éléments de type simple (entier,
chaîne, ...).

Je veux faire le tri par les x ?
Posté le 18 mai 2012 - 13:16
Bonjour,
Je l'avais testé mais me donne message d'erreur suivant :

"Les tris ne peuvent s'effectuer que sur des éléments de type simple (entier, chaîne, ...)"

donc je suis retourné à la méthode de tri à bulle classique en parcourant le tableau
Merci
Posté le 18 mai 2012 - 13:28
Pourtant chez moi ça fonctionne:
Element est une structure
sCodeStock est une chaîne
sCodeUvc est une chaîne
sEncours est une chaîne
FIN
ElementCourant est un Element
tabListeEncours est un tableau dynamique d'Element
....
TableauTrie(tabListeEncours,ttMembre,"scodestock")
....

Dans un autre projet, j'avais aussi utiliser l'autre syntaxe (avec la
procédure) pour trier un tableau de structure:

Client est une structure
ClientMagento est un STcustomerCustomerEntityToCreate
Adresse est un STcustomerAddressEntityCreate
sIdClient est une chaîne
bDoublon est un booléen = Faux
bExisteDeja est un booléen = Faux
sMotDePasseClair est une chaîne
bClientOK est un booléen = Faux
bAdresseOK est un booléen = Faux
bAdressePresente est un booléen = Faux
FIN


tabListeClientACreer est un tableau dynamique de Client
....
TableauTrie(tabListeClientACreer,ttFonction,Compare)

PROCEDURE Compare(Element1 est un Client,element2 est un Client)

SELON Vrai
CAS Majuscule(Element1:Client:m_email) < Majuscule(element2:Client:m_email)
RENVOYER -1
CAS Majuscule(Element1:Client:m_email) > Majuscule(element2:Client:m_email)
RENVOYER 1
CAS Majuscule(Element1:Client:m_email) = Majuscule(element2:Client:m_email)
SELON Vrai
CAS Majuscule(Element1.sIdClient) < Majuscule(element2.sIdClient)
RENVOYER -1
CAS Majuscule(Element1.sIdClient) > Majuscule(element2.sIdClient)
RENVOYER 1
CAS Majuscule(Element1.sIdClient) = Majuscule(element2.sIdClient)
RENVOYER 0
FIN
FIN


Frédéric.
Frédéric.

"Testeur" a écrit dans le message de groupe de discussion :
e114260c08e91ef8244f071dc68c082c@news.pcsoft...


Bonjour,
Je l'avais testé mais me donne message d'erreur suivant :

"Les tris ne peuvent s'effectuer que sur des éléments de type simple
(entier, chaîne, ...)"

donc je suis retourné à la méthode de tri à bulle classique en parcourant le
tableau
Merci
Posté le 18 mai 2012 - 18:26
Bonjur,

Moi je travaille avec Windev15 et vous ?

Merci de m'avoir répondu :)
Membre enregistré
188 messages
Posté le 18 mai 2012 - 19:16
Bonjour

Je travaille plus en WD16, mais il me semble avoir déjà fait ce type de trie en WD14, avant de migrer en WD16.

Donne nous ta syntaxe exacte de ton TableauTrie(), il y a peut-être une petite erreur de syntaxe.

Car moi aussi, cela fonctionne très bien avec la même syntaxe que les intervenants précédant, sur des tableaux de stucture ou tableaux d'objet et même trie multiple sur plusieurs membres de l'objet.

// Trie par défaut du tableau d'objet
TableauTrie(gf_tabDynObjReclamationBT_Moteur,ttMembre,"m_sNoreclamation;m_sNumBT;m_sNoVehicule")


STR_MesurePneu est une structure
sNoBrand est une chaîne = ""
sCodePosition est une chaîne = "" // Position 3 caractères
iCodeEtatMesure est un entier = 0
rMesurePneu est un réel = 0
bMesureEstimer est un booléen = Faux

sNumBT est une chaîne = ""
dhDateHeureMesure est une DateHeure = ""
iKmsBTAVie est un entier = 0
iKmsBTHubo est un entier = 0

sCategVeh est une chaîne = ""
sSousCategVeh est une chaîne = ""
sCodeModeleSemelle est une chaîne = ""

sCentreLocalisationVeh est une chaîne = ""
sCentreAppartenanceVeh est une chaîne = ""
FIN

//Déclaration de mon tableau :
l_objTabDyn_MesureParPosition est un tableau dynamique de 0 STR_MesurePneu // Mesure minimum par essieu

//L'appel à ma procédure avec le tableau en paramètre :
PrlInsererLigne(l_objTabDyn_MesureParPosition, l_sVehicule_Svg, l_sCodeEssieu_Svg, l_rEcartMax)

//Dans la procédure, j'ai 2 appels à un tri :
Procedure PrlInsererLigne(ppe_objTabDyn_MesureParPosition, ppe_sVehicule_Svg, ppe_sCodeEssieu_Svg, ppe_rEcartMax)
...
TableauTrie(ppe_objTabDyn_MesureParPosition, ttMembre, "rMesurePneu")
...
TableauTrie(ppe_objTabDyn_MesureParPosition, ttMembre, "sCodePosition")
...


Corinne Bonhomme
Montréal, Canada

Testeur wrote in news message <b846c8e5b4d442cc0526434add659fa8@news.pcsoft>:

Bonjur,

Moi je travaille avec Windev15 et vous ?

Merci de m'avoir répondu :)


--
Corinne Bonhomme
Montréal, Canada
Posté le 18 mai 2012 - 19:30
En 16, mais mon code date de la 15, et l'aide en ligne en 15 donne les mêmes
syntaxes.
On peut voir le code qui ne fonctionne pas ?

Frédéric.

"Testeur" a écrit dans le message de groupe de discussion :
b846c8e5b4d442cc0526434add659fa8@news.pcsoft...



Bonjur,

Moi je travaille avec Windev15 et vous ?

Merci de m'avoir répondu :)
Posté le 19 mai 2012 - 11:34
Bonjour,
j'avais essayé ces deux fonctions qui me donne le même erreur :

[ code ]

TableauTrie(MonTableau, ttCroissant)
Trie(MonTableau, ttCroissant)

[ /code]
Posté le 19 mai 2012 - 11:34
les deux fonctions avec ces parametres donne message erreur :

TableauTrie(Resultat,ttDécroissant)
Trie(MonTableau, ttCroissant)


par contre celui là marche bien
TableauTrie(Resultat,ttMembre,"x")

Donc je veux remplacer tout ce code

TableauTrier = True

pour c = 1 _a_ NbrLigne - 1

SI resultat[c]:x > resultat[c +1]:x ALORS

xx = resultat[c]:x
yy = resultat[c]:y
zz = resultat[c]:z

Resultat[c]:x = Resultat[c + 1]:x
Resultat[c]:y = Resultat[c + 1]:y
Resultat[c]:z = Resultat[c + 1]:z

Resultat[c + 1]:x = xx
Resultat[c + 1]:y = yy
Resultat[c + 1]:z = zz

TableauTrier = False

FIN
FIN

par une seule instruction
Merci beaucoup
Membre enregistré
188 messages
Posté le 01 juin 2012 - 19:44
Bonjour

Tu ne peux pas utiliser "TableauTrie(Resultat,ttDécroissant)" sur un tableau de structure... enfin, je ne pense pas.
Cette syntaxe est pour un TABLEAU SIMPLE et non, un tableau de structure.

Si tu veux faire un tri décroissant sur ton membre "x", il te suffit de faire TableauTrie(Resultat,ttMembre,"-x") et cela va surement marcher.

Je ne comprend pas ton problème, tu dis toi même que
"TableauTrie(Resultat,ttMembre,"x")" fonctionne !!!


Testeur wrote in news message <bc7658e2fd19fa1b0dcedea52d8002a7@news.pcsoft>:
les deux fonctions avec ces parametres donne message erreur :

TableauTrie(Resultat,ttDécroissant)
Trie(MonTableau, ttCroissant)


par contre celui là marche bien
TableauTrie(Resultat,ttMembre,"x")

Donc je veux remplacer tout ce code

TableauTrier = True

pour c = 1 _a_ NbrLigne - 1

SI resultat[c]:x > resultat[c +1]:x ALORS

xx = resultat[c]:x
yy = resultat[c]:y
zz = resultat[c]:z

Resultat[c]:x = Resultat[c + 1]:x
Resultat[c]:y = Resultat[c + 1]:y
Resultat[c]:z = Resultat[c + 1]:z

Resultat[c + 1]:x = xx
Resultat[c + 1]:y = yy
Resultat[c + 1]:z = zz

TableauTrier = False

FIN
FIN

par une seule instruction
Merci beaucoup


--
Corinne Bonhomme
Montréal, Canada
Posté le 02 juin 2012 - 01:27
Bonjour


les deux fonctions avec ces parametres donne message erreur :

TableauTrie(Resultat,ttDécroissant)
Trie(MonTableau, ttCroissant)


Au début j'avais pas utilisé la syntaxe "ttMembre"

voici l'aide de la fonction TableauTrie :

Trie un tableau WLangage. Les différents tris suivants peuvent être réalisés :
Tri d'un tableau d'éléments simples à une dimension.
Tri d'un tableau d'éléments simples à deux dimensions selon une ou plusieurs colonnes.
Tri d'un tableau de classe ou de structures à une dimension selon 1 ou plusieurs membres.
Tri d'un tableau à une dimension en fournissant une procédure de comparaison.
Remarques :
Cette fonction n'est pas disponible sur les tableaux fixes.
Cette fonction est équivalente à la fonction Trie.
Cette fonction est utilisable sur les tableaux des variables de type avancé.

normalement ttDécroissant doit aussi fonctionne !

Merci autre fois et a+