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

Lazarus Pascal Discussion :

Quelle est la meilleure méthode de tri pour StringGrid ?


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 333
    Par défaut Quelle est la meilleure méthode de tri pour StringGrid ?
    Bonjour

    j'ai un StringGrid avec plus de 7000 lignes, quelle est la meilleure méthode pour effectuer un tri en se basant sur la colonne 1 ?

    Quelqu'un a-t-il déja utilisé la méthode de tri pivot sur un StringGrid ?

    Voici le code que j'utilise mais c'est très très lent...
    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
    Var i,j:Integer;
    S:String;
     
      Begin
      With StringGrid1 Do
      Begin
      For i:=1 to RowCount-1 Do
      For j:=i+1 To RowCount-1 Do
      begin
     if AnsiCompareText(Cells[0, i], Cells[0, j]) > 0 then   
      Begin
      S := StringGrid1.Rows[i].Text;
      Rows[i].Text := Rows[j].Text;
      Rows[j].Text := S;
      End;
      end;
      End;
      showmessage('terminé...');
      End;

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,

    Tu n'as pas dû chercher longtemps, donc continue les recherches.

  3. #3
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 333
    Par défaut
    j'ai bien fais plusieurs recherches sur le tri pivot mais elles s'appliquent presque toutes à des tableaux sous delphi et j'ai du mal à l'adapter à un StringGrid sous lazarus

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut les méthodes de tris ne manquent pas, le tri par pivot comme tu le mentionnes n'est certainement pas le plus adapté et rapide pour 7000 données fais des recherche sur le "QuickSort" / "DualPivot QuickSort", "Merge sort" tu devrais avoir plein de résultats

    https://www.ljll.math.upmc.fr/pegon/...BCPST/TP07.pdf
    https://castelain.developpez.com/sources/TriStringGrid/
    https://www.developpez.net/forums/d1...e-tstringgrid/

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Bonsoir à toutes et à tos,

    Je me greffe honteusement sur cette discussion.

    Le composant TStringGrid a une propriété "ColumnClickSorts" qui, lorsqu'on la met à "Vrai", place une petite flèche dans le haut des colonnes et qui, lorsqu'on clique dessus, s'inverse. Pour autant, aucun tri ne s'effectue. Je n'ai pas trouvé ce qu'il fallait faire pour que le tri s'effectue.

    Cordialement.

    Pierre

  6. #6
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Citation Envoyé par ChPr Voir le message
    Bonsoir à toutes et à tos,

    Je me greffe honteusement sur cette discussion.

    Le composant TStringGrid a une propriété "ColumnClickSorts" qui, lorsqu'on la met à "Vrai", place une petite flèche dans le haut des colonnes et qui, lorsqu'on clique dessus, s'inverse. Pour autant, aucun tri ne s'effectue. Je n'ai pas trouvé ce qu'il fallait faire pour que le tri s'effectue.

    Cordialement.

    Pierre
    il faut utiliser la méthode SortColRow dans le code

    PS : Avec "ColumnClickSorts" je crois que cela fonctionne uniquement si ce sont des chaines de caractères. A voir "OnCompareCells"

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #7
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 333
    Par défaut
    bonjour

    voila mon code que j'essaie d'adapter à mon StringGrid, mais ça ne fonctionne pas, ou est la ou les erreurs?

    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
    35
    36
    37
    38
    39
    40
    41
    42
    procedure TForm1.Button2Click(Sender: TObject);
    begin
           TriRapide(1,stringgrid1.RowCount-2);
    end;
     
    Function TriPartition (Grid1: TStringGrid; premier , dernier : integer):integer ;
       var
         i : integer;
           j : Integer;
           pivot, temp  : string;
     
      begin
        with Grid1 do
    begin
         i := premier-1;
         j := dernier;
         pivot := cells[0,dernier];
     
         repeat
             repeat i := i+1 until Cells[0,i] >= pivot;
             repeat j := j-1 until Cells[0,j] <= pivot;
             temp :=rows[i].text;
             rows[i].text :=rows[j].text;
             rows[j].text :=temp;
         until j <= i;
         rows[j].text := rows[i].text;
         rows[i].text := rows[dernier].text;
         rows[dernier].text := temp;
        result := i;
    end;
        end;
     
    procedure TForm1.TriRapide( premier, dernier : integer);
    var i: Integer;
    begin
       if dernier>premier then
       begin
         i := TriPartition(StringGrid1, premier , dernier );
         TriRapide( premier , i-1 );
         TriRapide( i+1 , dernier );
       end
    end;
    merci

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    HS

    Bonjour,

    en parlant de méthode, il n'y aurait pas quelqu'un pour, dans le titre, remplacer "quel est la meilleur" par "Quelle est la meilleure" ?
    Le plus fou c'est que dans le texte du post c'est correct !
    Bon, il reste deux jours à l'auteur pour éditer son titre.

    Merci beaucoup car ça me tue les yeux à chaque fois que je passe là,

    /HS

  9. #9
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 333
    Par défaut
    j'avais utilisé sortcolrow mais se n'est pas marrant...
    moi j'aime savoir comment ça fonctionne, et le meilleur moyen est de faire et refaire...
    dans mon 1er code j'utilisais la comparaison AnsiCompareText, et dans le second j'aurais du mais je l'ai complètement oublié.

    pour le puriste de l'orthographe, les fautes de frappe ça arrivent , la faute aux sms, et je m'en f.. complètement



    merci à tous

  10. #10
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par sematimo Voir le message
    pour le puriste de l'orthographe, les fautes de frappe ça arrivent , la faute aux sms, et je m'en f.. complètement
    L'utilisation du langage SMS […] est proscrite sur le forum.
    Les messages écrits en langage SMS seront, selon le cas, édités ou supprimés.
    source

    Et donc tu te fous de ceux qui te lisent et subissent tes négligences. On ne t'en remerciera pas, et on en prend bonne note pour la suite…

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par Jipété Voir le message
    HS

    Bonjour,

    en parlant de méthode, il n'y aurait pas quelqu'un pour, dans le titre, remplacer "quel est la meilleur" par "Quelle est la meilleure" ?
    Le plus fou c'est que dans le texte du post c'est correct !
    Bon, il reste deux jours à l'auteur pour éditer son titre.

    Merci beaucoup car ça me tue les yeux à chaque fois que je passe là,

    /HS
    On est au moins deux dans ce cas, mais je ne le signale plus, sinon il me faudrait beaucoup d'argent pour remplacer régulièrement mon clavier pour cause d'usure.

  12. #12
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par droggo Voir le message
    Bonjour,

    On est au moins deux dans ce cas, mais je ne le signale plus, sinon il me faudrait beaucoup d'argent pour remplacer régulièrement mon clavier pour cause d'usure.
    Je pense qu'on est plus de deux, mais moi je l'ouvre, histoire d'essayer de préserver la culture car, quand les vieux ne seront plus là, ils seront comme des céohaines, les djeun's, avec leurs sms, à ne plus se comprendre.
    Et ça ne va aller qu'en empirant, si personne n'essaie de redresser la barre, exemple : merci à celui qui a corrigé l'une des deux fautes, dommage qu'il ait oublié l'autre, alors que j'avais bien indiqué les deux. C'est fou, des trucs pareils…

  13. #13
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 333
    Par défaut
    il faut vivre avec son temps. le français n'est pas une langue morte, elle doit évoluer constamment, et que font les jeunes?, ils la simplifie, l'adapte à la technologie, aux nouvelles habitudes, aux réseaux sociaux, etc.
    Au fait, j'ai corrigé l'autre faute...

  14. #14
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par sematimo Voir le message
    Au fait, j'ai corrigé l'autre faute...
    Merci
    Et, as-tu remarqué que ton titre est plus joli ainsi ?

    Citation Envoyé par sematimo Voir le message
    il faut vivre avec son temps. le français n'est pas une langue morte, elle doit évoluer constamment, et que font les jeunes?, ils la simplifient, l'adaptent à la technologie, aux nouvelles habitudes, aux réseaux sociaux, etc.
    Mais là je ne suis pas d'accord (et je crois même que c'est une excuse pour cacher... les taches ou les tâches ? Tu vois bien que ça a son importance. D'ailleurs, tu préfères une amende ou une amande ?)
    Bon, ça n'est pas le sujet, alors brisons là.

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  2. Réponses: 87
    Dernier message: 06/07/2011, 15h33
  3. Réponses: 1
    Dernier message: 17/04/2010, 02h18
  4. Réponses: 0
    Dernier message: 03/06/2008, 12h12
  5. quel est le meilleur algo de tri de liste ?
    Par sony351 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 24/07/2005, 02h00

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