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

Téléchargez Pascal Discussion :

Tri TStringList


Sujet :

Téléchargez Pascal

  1. #1
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut Tri TStringList
    Bonjour à tous,

    Je vous propose un nouvel élément à utiliser : Tri TStringList

    Le tri alphabétique ne se fait pas correctement dans un TStringList lorsque des chaines contiennent des caractères accentués.

    En attendant une implémentation dans une version ultérieure de Lazarus, voici de quoi vous dépanner.

    Deux manières :

    a) utiliser TLatinStringList (dans le zip) qui est dérivé de TStringList avec simplement un override de la fonction DoCompareText : remplacement, pour le tri, des caractères accentués par leur correspondant non accentué. L'avantage est que, pour une liste triée, l'ajout de nouvelles chaines va directement se faire au bon endroit. L'inconvénient est que les fonctions Find et IndexOf (qui utilisent DoCompareText) ne vont plus distinguer "élève" de "élevé". Ce qui peut poser problème si on interdit les duplicates.

    b) utiliser un CustomSort avec une fonction faisant appel à la fonction RemoveAccent. Pour ceux qui ne connaissent pas la méthode, voir le fichier txt.



    Merci d'avance pour vos commentaires

    Thierry

  2. #2
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Merci d'avance pour vos commentaires
    Merci pour cette contribution qui va aider tous ceux qui se débattent avec les caractères UTF8 .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    @gvasseur58 :

    Chose promise, chose due.
    http://www.developpez.net/forums/d15...list-fouillis/

    @Tous :

    A la réflexion, je vous recommande la deuxième manière (CustomSort + function RemoveAccent) en laissant évidemment la propriété Sorted = false.
    On évite ainsi les problèmes de duplicates.
    CustomSort ne maintient pas un tri constant lors de l'ajout (modification) de ligne. Mais souvent, cela n'est pas nécessaire. On refait le tri au besoin.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 196
    Points : 435
    Points
    435
    Par défaut
    Merci. C'est en effet un casse-tête permanent que ces caractère UTF8.
    Hier je m’étonnais un peu de ne pouvoir remplacer des guillemets "" par des “” qu'en utilisant un StringReplace, qui est “élastique” avec les caractères de plusieurs octets. J'ai regardé le fichier texte utf8 en hexa, et j'ai vu que j'essayais de remplace $22 par $E2809C et $E2809D sans faire de place pour trois octets.
    Tant qu'on se contentait de l'alphabet latin, on était quand même bien tranquille avec l'ANSI…

  5. #5
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Citation Envoyé par Francois_C Voir le message
    Merci. C'est en effet un casse-tête permanent que ces caractère UTF8.
    Merci à toi.
    Casse-tête ? Pour t'en convaincre encore plus, je t'invite à regarder tout ce qu'il faut coder pour mettre un mot en minuscules ! function UTF8LowerCase dans lazarus\components\lazutils\lazutf8.pas

    Cordialement
    Thierry

  6. #6
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Francois_C Voir le message
    Tant qu'on se contentait de l'alphabet latin, on était quand même bien tranquille avec l'ANSI…
    Bien d'accord, mais le problème est qu'on s'est rendu compte que la Terre était aussi peuplée de très nombreux êtres étranges utilisant d'étranges signes pour écrire .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

Discussions similaires

  1. Tri multiple d'un TStringList
    Par Pierre95 dans le forum Débuter
    Réponses: 10
    Dernier message: 29/06/2014, 10h01
  2. [Lazarus] Tri dans tStringList
    Par wintercold dans le forum Lazarus
    Réponses: 3
    Dernier message: 20/04/2008, 13h13
  3. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  4. Tri TStringList par heure
    Par rxseac dans le forum Delphi
    Réponses: 3
    Dernier message: 16/03/2007, 11h41
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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