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

C++Builder Discussion :

[ListView] tri particulier (comparaison num�rique) [Sources]


Sujet :

C++Builder

  1. #1
    Expert confirm� Avatar de Cybher
    Homme Profil pro
    Consultant r�seaux et s�curit�
    Inscrit en
    Mai 2005
    Messages
    3 281
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant r�seaux et s�curit�
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par d�faut [ListView] tri particulier (comparaison num�rique)
    Bonjour,

    J'utilise la m�thode Alphasort() pour trier des mots.
    Mais je n'ai pas trouv� la m�thode �quivalente pour trier des nombres.

    Pouvez vous me renseigner.
    merci

  2. #2
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par d�faut
    Salut,

    je sais pas si il existe une telle methode pour trier les nombres, mais ce que je te propose est de faire une fonction qui converti tes nombres en AnsiString, de les triers, puis de les retransformer en int...

    ++

  3. #3
    Expert confirm� Avatar de Cybher
    Homme Profil pro
    Consultant r�seaux et s�curit�
    Inscrit en
    Mai 2005
    Messages
    3 281
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant r�seaux et s�curit�
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par d�faut
    Merci de ta r�ponse.

    Mais en faisant cela , apr�s tri, je ne vais pas avoir par exemple cela:

    1
    10
    2

    au lieu de
    1
    2
    10

    En effet si je passe en ansistring, il va comparer caractere par caractere pour le tri non?

  4. #4
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par d�faut
    oui, en effet, je suis trop con :-)
    dsl

  5. #5
    Expert confirm� Avatar de Cybher
    Homme Profil pro
    Consultant r�seaux et s�curit�
    Inscrit en
    Mai 2005
    Messages
    3 281
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant r�seaux et s�curit�
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par d�faut
    Mais non t'es pas trop con.

    J'ai fait aussi cette erreur, c'est pour sa que j'ai vu que sa marchait pas..

  6. #6
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    En standard il y a std::sort pour trier n'importe quoi. Inclure <algorithm>.

  7. #7
    Expert confirm� Avatar de Cybher
    Homme Profil pro
    Consultant r�seaux et s�curit�
    Inscrit en
    Mai 2005
    Messages
    3 281
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant r�seaux et s�curit�
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par d�faut
    Merci de ta r�ponse.

    Mais je ne vois pas trop comment l'utiliser. Je travaille avec des listviews � plusieurs colonnes.
    Merci de me donner une piste.

  8. #8
    Membre �clair�
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Par d�faut
    Sinon m�thode interm�diaire, tu peux regarder le nombre de chiffres max que tu as et tu rajoute le nombre de z�ros manquants en conc�quence, comme ca tu aura bien :
    01
    02
    10

    Et ensuite quand tu le repasse en int � mon avis le 0 saute (mais c'est � confirmer quand m�me)

  9. #9
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Citation Envoy� par Cybher
    Mais je ne vois pas trop comment l'utiliser. Je travaille avec des listviews � plusieurs colonnes.
    Ah, hum... Quel est le type exact des donn�es que tu veux trier ? Elles sont stock�es dans quel genre de conteneur ?

    Pour ce qui est du fonctionnement de std::sort, elle prend en param�tre une paire d'it�rateurs sur la s�quence � trier, et si on souhaite faire un tri utilisant un crit�re perso (c'est l'op�rateur < par d�faut qui est utilis�), on peut passer en troisi�me param�tre un foncteur (voir la FAQ C++).

  10. #10
    Expert confirm� Avatar de Cybher
    Homme Profil pro
    Consultant r�seaux et s�curit�
    Inscrit en
    Mai 2005
    Messages
    3 281
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant r�seaux et s�curit�
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par d�faut
    J'ai une listview d'environ 400 lignes.
    en fait, j'ai plusieurs colonnes dans ma listview: certaines colonnes contiennent du tecte, d'autres des nombres.
    en cliquant sur une colonne, je voudrais trier selon cette colonne.
    pour du texte j'ai r�ussi mais le probl�me vient quand je veux trier les nombres.
    je n'aarive pas � le faire par nombre croissant.
    je continue mes recherches
    encore merci pour votre aide
    je vais tester les m�thodes propos�es.

  11. #11
    Membre �prouv�

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par d�faut
    Tu as un exemple mutli-thread avec 3 types de tris diff�rents dans le dossier Exemples de C++ Builder.

    Sinon tu cherches avec ton ami quelque chose comme
    "tri rapide algorithme"
    et il devrait te sortir quelque chose de symapthique

  12. #12
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    Dans la fonction que tu utilises pour la comparaison des �l�ments, tu peux sans doute distinguer les 3 cas suivants:
    cas 1 : les deux �lements sont num�riques => tu renvoies la comparaison des nombes correspondants
    cas 2 : les deux �l�ments sont alphab�tiques => tu renvoies la comparaison des cha�nes correspondantes
    cas 3 : l'un est num�rique l'autre est alphab�tique, tu renvoies le fait que le nombre est "plus petit" que la cha�ne
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  13. #13
    Expert confirm� Avatar de Cybher
    Homme Profil pro
    Consultant r�seaux et s�curit�
    Inscrit en
    Mai 2005
    Messages
    3 281
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant r�seaux et s�curit�
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par d�faut
    merci de vos r�ponses

    en fait je n'ai que le cas 1 ou 2.

    Sachant que je n'ai pas de porbl�me pour les �l�ments alphab�tiques.
    Il me reste les �l�ments num�riques.
    Je verrai sa un peu plus tard car je suis en stage et on m'a demand� de passer � autre chose pour le moment.(il n'a que cela qui ne fonctionnait pas)
    mais j'essaierais de regard� entre deux.

    Merci de vos conseils.

  14. #14
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Bonjour,

    Pour plus tard, donc
    Il te faut impl�menter le gestionnaire d'�v�nements OnCompare du ListView. Il est appel� pour comparer un �l�ment � un autre, m�me avec AlphaSort. De la sorte que tu peux appeler AlphaSort m�me pour trier des valeurs num�riques, il s'agit pour toi d'�crire le gestionnaire ad�quat (conversion de l'AnsiString en int et comparaison par exemple).

    Cordialement,

    Arnaud

  15. #15
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Juste en passant, une proposition d'impl�mentation :

    Pr�requis : pour chaque colonne du TListView, positionner sa propri�t� Tag � 0 si il faut faire une comparaison de cha�nes, � toute autre valeur pour une comparaison num�rique

    gestionnaire d'�v�nements OnColumnClick
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    // mémorisation de la colonne à trier
    ((TListView*) Sender)->Tag = Column->Index;
    // déclenchement du tri
    ((TListView*) Sender)->AlphaSort();
    gestionnaire d'�v�nements OnCompare
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    TListView * lst = (TListView *) Sender;
    if (lst->Columns->Items[lst->Tag]->Tag == 0) // Comparaison chaînes
    {
       AnsiString A1;
       AnsiString A2;
       if (lst->Tag == 0)
       {
          A1 = Item1->Caption;
          A2 = Item2->Caption;
       }
       else
       {
          A1 = Item1->SubItems->Strings[lst->Tag - 1];
          A2 = Item2->SubItems->Strings[lst->Tag - 1];
       }
       Compare = AnsiCompareStr(A1,A2);
    }
    else // comparaison numérique
    {
       int I1;
       int I2;
       if (lst->Tag == 0)
       {
          I1 = Item1->Caption.ToInt();
          I2 = Item2->Caption.ToInt();
       }
       else
       {
          I1 = Item1->SubItems->Strings[lst->Tag - 1].ToInt();
          I2 = Item2->SubItems->Strings[lst->Tag - 1].ToInt();
       }
       Compare = I1 - I2;
    }

  16. #16
    Expert confirm� Avatar de Cybher
    Homme Profil pro
    Consultant r�seaux et s�curit�
    Inscrit en
    Mai 2005
    Messages
    3 281
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant r�seaux et s�curit�
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par d�faut
    Merci GreyBird,

    J'utilisais en effet l'�v�nement on compare pour mon alphasort.
    J'essai de regarder cela ce midi.

    Merci pour vos aides.

  17. #17
    Expert confirm� Avatar de Cybher
    Homme Profil pro
    Consultant r�seaux et s�curit�
    Inscrit en
    Mai 2005
    Messages
    3 281
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant r�seaux et s�curit�
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par d�faut
    Et bien sa fonctionne!!
    Au risque de me r�p�ter merci � tous et en particulier � GreyBird!
    Sa m�thode fonctionne parfaitement.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Tri particulier dans un �tat
    Par clonezo� dans le forum IHM
    R�ponses: 5
    Dernier message: 28/11/2007, 12h30
  2. [WPF] Listview tri et databinding
    Par J�rem22 dans le forum Windows Presentation Foundation
    R�ponses: 9
    Dernier message: 26/09/2007, 14h08
  3. Listview tri� sur plus d'une colonne
    Par Duan dans le forum Delphi
    R�ponses: 2
    Dernier message: 26/05/2006, 03h29
  4. R�ponses: 4
    Dernier message: 16/12/2005, 17h43
  5. [VB6][ListView] Tri sur chaque colonne
    Par frlap dans le forum VB 6 et ant�rieur
    R�ponses: 4
    Dernier message: 26/05/2004, 11h20

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