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

  1. #1
    Membre du Club
    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é
    Bonjour,

    Tu n'as pas dû chercher longtemps, donc continue les recherches.
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  3. #3
    Membre du Club
    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
    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/sou...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 éclairé
    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
    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 du Club
    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
    Membre expert
    Salut regardes mon dernier messages Ca ne sert à rien de vouloir réécrire la procedure de tri. Le stringgrid contient déja une méthode de tri utilisant l'algorithme "QuickSort" si tu veux personnaliser ton tri en fonction des données, il faut passer par "OnCompareCells". De plus ta méthode ne peut pas fonctionner car tu fait des comparaisons comme si c'était des nombres alors que se sont des chaines de caractères. Donc soit tu convertis tes chaines en nombres soit tu compares tes chaines avec CompareText ou CompareStr De plus assigner Rows[].text comme tu les fait ne fonctionnera pas.

    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

  9. #9
    Membre éclairé
    Citation Envoyé par BeanzMaster Voir le message
    ... il faut utiliser la méthode SortColRow dans le code ...
    J'avais cherché une telle méthode, mais je ne l'avais pas trouvé ; je ne sais pas chercher !

    Cette méthode devrait résoudre le problème de "sematimo" car en plus d'être on ne peut plus simple, c'est un "tri rapide".

    Cordialement.

    Pierre.

  10. #10
    Expert éminent sénior
    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
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Membre du Club
    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

  12. #12
    Expert éminent sénior
    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…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Expert confirmé
    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.
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  14. #14
    Expert éminent sénior
    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…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Membre du Club
    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...

  16. #16
    Expert éminent sénior
    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à.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #17
    Membre du Club
    Bonjour

    Dans mon activité, je suis amené à consulter nombre de CV et SMS, si je devais tenir compte de l'orthographe et grammaire, je ne retiendrais aucune candidature.
    Pour ma part, je n'utilise pratiquement plus le stylo-bile, préfèrant dicter à mon smartphone, ma tablette ou ordinateur.
    Cette pratique se généralisant, d'ici une décennie voir moins, l'écriture manuscrite aura disparue, aussi la défense de la langue française est un cause perdue d'avance,
    Il faut s'adapter.

    Pour en revenir au sujet de ce forum, je vous livre la dernière mouture de mon code concernant le tri. Après de multiples essais, cette dernière fonctionne parfaitement avec près de 7500 lignes et 23 colonnes.

    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
    43
    44
    45
    46
    47
    48
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      TriRapide(1, stringgrid1.RowCount - 1);
    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 AnsiCompareText(Cells[0, i], pivot) >= 0;
     
          repeat
            j := j - 1
          until AnsiCompareText(Cells[0, j], pivot) <= 0;
          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 à tous
    bonne journée

  18. #18
    Membre expert
    Salut

    Je me sens obligé de réagir...

    Citation Envoyé par sematimo Voir le message

    Dans mon activité, je suis amené à consulter nombre de CV et SMS, si je devais tenir compte de l'orthographe et grammaire, je ne retiendrais aucune candidature.
    Le niveau baisse d'une façon générale et pas qu'en orthographe malheureusement, passons pour les SMS car la concision y est importante et on ne cherche à communiquer des idées complexes. Certaines ESN a une époque avaient remis la maîtrise du français à l'ordre du jour, je ne sais si c'est encore d'actualité. Le problème c'est que l'expression perd en précision avec les conséquences que cela peut avoir. On va parfois des messages sur les forums qui sont incompréhensibles même phonétiquement. Si ces personnes codent comme elles s'expriment cela doit faire de beaux programmes...

    Citation Envoyé par sematimo Voir le message

    Pour ma part, je n'utilise pratiquement plus le stylo-bile, préfèrant dicter à mon smartphone, ma tablette ou ordinateur.
    Cette pratique se généralisant, d'ici une décennie voir moins, l'écriture manuscrite aura disparue, aussi la défense de la langue française est un cause perdue d'avance,
    Il faut s'adapter.
    Ce n'est pas de l'adaptation c'est de la démission, on tue des cultures comme cela.
    Stylo-bile est un terme qui me plaît bien, à reprendre dans un autre contexte, perso j'utilise encore un stylo-plume, ça marche très bien et ne consomme pas trop de plastique. Bien des personnes que je connais n'ont à rien à faire de ces gadgets technologiques et ils n'en vivent pas plus mal.
    La disparition de l'écriture manuscrite n'est sans doute pas pour demain, elle, au moins, ne nécessite pas d'électricité.
    Quant à la cause perdue, mieux vaut s'exprimer des idées claires dans un français correct que dans un globish dont la précision et la clarté laissent à désirer. Et si c'est une cause perdue, pourquoi dès lors venir chercher des renseignements sur un forum francophone ?

    Citation Envoyé par sematimo Voir le message

    Pour en revenir au sujet de ce forum, je vous livre la dernière mouture de mon code concernant le tri. Après de multiples essais, cette dernière fonctionne parfaitement avec près de 7500 lignes et 23 colonnes.

    C'est l'essentiel, ton problème est résolu.

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.8 (FPC 3.0), Python 3 -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal
    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  19. #19
    Membre actif
    Bonjour,
    Il est vrai que l'écriture devient pour certains une technologie dépassée mais pour les personnes contre l'écriture en bon français ou autres langues ils oublient que l'écriture est presque aussi vieille que le monde il suffit de voir les dessins dans les grottes c'était déjà une forme d'expression écrite. Alors les outils informatiques n'auront pas le même succès.
    A+

###raw>template_hook.ano_emploi###