PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → foncions trie et tab structures
foncions trie et tab structures
Iniciado por blacksun, 13,jun. 2019 11:40 - 9 respuestas
Miembro registrado
26 mensajes
Publicado el 13,junio 2019 - 11:40
Bonjour,
je voudrais trier un tableau de structures avant de l’afficher dans une liste .
mais j'ai droit un crash lors du tri indiquant
Les tris ne peuvent s'effectuer que sur des éléments de type simple (entier, chaîne, ...)


une idées?

Structure et classe:
STAPI est une structure
sType est une chaîne
sADR_3 est une chaîne
sName est une chaîne
sCP est un entier
sCodeInsee est une chaîne fixe sur 5
sCity est une chaîne
sLabel est une chaîne
sLat est une chaîne
sLon est une chaîne
FIN



API_BAN est une Classe


LOCAL
AdresseTemp est un STAPI
m_tabSTAPI_retournée_structure_TAB est un tableau de STAPI
Struc_STAPI est une STAPI
AdresseJSON est un JSON
indiceTabAdresse est un entier sans signe
sParaURL est une chaîne
FIN


je emplis mon tableau
TableauSupprimeTout(m_tabSTAPI_retournée_structure_TAB)
i est un entier
i=1
TANTQUE PAS (AdresseJSON.features[i].properties.score < Pertinence OU AdresseJSON.features[i]=0)
AdresseTemp.sCity = AdresseJSON.features[i].properties.city
AdresseTemp.sCP = AdresseJSON.features[i].properties.postcode
AdresseTemp.sCodeInsee = AdresseJSON.features[i].properties.citycode
AdresseTemp.sADR_3 = AdresseJSON.features[i].properties.housenumber
AdresseTemp.sLabel = AdresseJSON.features[i].properties.label
AdresseTemp.sName = AdresseJSON.features[i].properties.name
AdresseTemp.sType = AdresseJSON.features[i].properties.type
AdresseTemp.sLat = AdresseJSON.features[1].geometry.coordinates[1]
AdresseTemp.sLon = AdresseJSON.features[1].geometry.coordinates[2]
TableauAjoute(m_tabSTAPI_retournée_structure_TAB,AdresseTemp)
// Trace(gMonAdresse.m_tabSTAPI_retournée_structure_TAB)
i++
FIN

remplissage liste
SI gMonAdresse.ConnexionAPIChargerTabAdresseLecturePremiereAdresse(SAI_ADR_1) ALORS
Trie(gMonAdresse.Struc_STAPI.sCP,ttCroissant)
SI gMonAdresse.AdresseLitPremier() ALORS
ListeSupprimeTout(LISTE_SaisieAssisté)
BOUCLE

ListeAjoute(LISTE_SaisieAssisté,gMonAdresse.Struc_STAPI.sLabel+gLien(i))
i++

Trace(gMonAdresse.Struc_STAPI.sCP)
À FAIRE TANTQUE gMonAdresse.LitSuivantAdresse()
LISTE_SaisieAssisté..Visible=Vrai
FIN

FIN
Miembro registrado
3.777 mensajes
Publicado el 13,junio 2019 - 12:21
Et pourquoi ne pas trié la liste après l'avoir rempli ?
Miembro registrado
4.361 mensajes
Publicado el 13,junio 2019 - 12:22
Bonjour,
Pour trier un tableau de structure, il faut utiliser la syntaxe suivante :
TableauTrie(<Tableau WLangage> , <ttMembre> , <Membres>)

cf https://doc.pcsoft.fr/?3075007&name=tableautrie_fonction

Eventuellement, à l'issue de l'allocation du tableau, on peut commencer par
TableauTrie(<Tableau WLangage> , <ttMembre> , <Membres>)

Puis remplacer les TableauAjoute par TableauAjouteTrié
--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 13,junio 2019 - 12:26
Miembro registrado
26 mensajes
Publicado el 13,junio 2019 - 13:08
popoy j'ai essayé ta méthode mais je peu visiblement pas trier la liste
SI gMonAdresse.ConnexionAPIChargerTabAdresseLecturePremiereAdresse(SAI_ADR_1) ALORS
SI gMonAdresse.AdresseLitPremier() ALORS
ListeSupprimeTout(LISTE_SaisieAssisté)
BOUCLE

ListeAjoute(LISTE_SaisieAssisté,gMonAdresse.Struc_STAPI.sLabel+gLien(i))
i++

// Trace(gMonAdresse.Struc_STAPI.sCP)
À FAIRE TANTQUE gMonAdresse.LitSuivantAdresse()

Trie(LISTE_SaisieAssisté,ttCroissant,Code_postal)
LISTE_SaisieAssisté..Visible=Vrai
FIN

FIN


"Cette fonction n'est pas disponible pour un élément de type 'entier'."

vorolinquo voila ce que j'obtient en faisant ta méthode
AdresseTemp.sCity = AdresseJSON.features[i].properties.city
AdresseTemp.sCP = AdresseJSON.features[i].properties.postcode
AdresseTemp.sCodeInsee = AdresseJSON.features[i].properties.citycode
AdresseTemp.sADR_3 = AdresseJSON.features[i].properties.housenumber
AdresseTemp.sLabel = AdresseJSON.features[i].properties.label
AdresseTemp.sName = AdresseJSON.features[i].properties.name
AdresseTemp.sType = AdresseJSON.features[i].properties.type
AdresseTemp.sLat = AdresseJSON.features[1].geometry.coordinates[1]
AdresseTemp.sLon = AdresseJSON.features[1].geometry.coordinates[2]

TableauTrie(m_tabSTAPI_retournée_structure_TAB,ttCroissant,AdresseTemp.sCP)
TableauAjouteTrié(m_tabSTAPI_retournée_structure_TAB,AdresseTemp)
i++

"Les tris ne peuvent s'effectuer que sur des éléments de type simple (entier, chaîne, ..."
Miembro registrado
4.361 mensajes
Publicado el 13,junio 2019 - 16:40
Tu as oublié le ttmembre comme le précise la doc
TableauTrie(m_tabSTAPI_retournée_structure_TAB,ttMembre+ttCroissant,AdresseTemp.sCP)


Par ailleurs, le TableauTrie, se fait à l'allocation du tableau pour être utilisé avec TableauAjouteTrié, (dans ton cas, tu trie 2 fois.
Si tu veux l'utiliser dans ta boucle, il faut l'appeler après le TableauAjoute ou alors, à la sortie de la boucle (il n'y aura qu'un seul tri dans ce cas)

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 13,junio 2019 - 16:46
Miembro registrado
26 mensajes
Publicado el 13,junio 2019 - 16:54
Je ne comprends pas j'ai fait ce que tu m'as demandé à savoir
TableauAjoute(m_tabSTAPI_retournée_structure_TAB,AdresseTemp)
TableauTrie(m_tabSTAPI_retournée_structure_TAB,ttMembre+ttCroissant,AdresseTemp.sCP)
i++

j'ai malheureusement droit à cela
Mauvais paramètre de tri : utilisez ttCroissant ou ttDécroissant pour trier un tableau selon une de ses colonnes.
Mensaje modificado, 13,junio 2019 - 16:57
Miembro registrado
4.361 mensajes
Publicado el 13,junio 2019 - 18:27
m_tabSTAPI_retournée_structure_TAB est un tableau de STAPI //On déclare le tableau
m_tabSTAPI_retournée_structure_TAB=allouer tableau de 0 STAPI //On alloue le tableau

TableauTrie(m_tabSTAPI_retournée_structure_TAB,ttMembre,"+sCP") //On définit le tri sur sCP (-pour un tri décroissant, en cas de tri multiple les membres sont séparés par ";" eg "+sCP;+sName"


TANTQUE PAS ....
//Affectation....
TableauAjouteTrié(m_tabSTAPI_retournée_structure_TAB,AdresseTemp)

i++
FIN


Par ailleurs, pourquoi ne pas remplir directement ta liste via ton tableau de structure (remplissage par variable)?
Un ListeAffiche à la fin de ta boucle d'affectation évite de relire ton tableau séquentiellement
--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 13,junio 2019 - 18:48
Miembro registrado
3.777 mensajes
Publicado el 14,junio 2019 - 08:20
@blacksun,
le trie sur une liste peut ce faire de 2 façons.
- par la propriété ..trié voir https://doc.pcsoft.fr/?2510115&name=triee_propriete
- par la fonction listetrie voir https://doc.pcsoft.fr/?1000017022&name=listetrie_fonction
Miembro registrado
4.361 mensajes
Publicado el 14,junio 2019 - 10:13
Le problème est que sa liste n'est pas triée sur les éléments affichés :
Tri sur sCP et affichage de Label dans la liste

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
26 mensajes
Publicado el 14,junio 2019 - 10:26
TableauTrie(m_tabSTAPI_retournée_structure_TAB,ttMembre,"+sCP")


Ce code marche a une exception la dernière ligne de ma liste ne correspond pas au tri...