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

Langage Delphi Discussion :

Comparaison de chaînes contenant des chiffres


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 174
    Points : 38
    Points
    38
    Par défaut Comparaison de chaînes contenant des chiffres
    Bonjour,

    J'ai besoin de trier une TStringList qui contient des nom d'isotopes qui ont des noms qui ressemblent à ça :
    He-5
    Zn-59
    Zn-60
    Zn-61
    Zn-61m
    Zn-61n
    Zn-68
    Zn-69
    Zn-69m
    Le souci c'est que le tri par défaut sur la stringlist ne gère pas bien l'ordre alphabétique quand il y a des chiffres dans les chaînes.
    Quelqu'un a déjà codé une méthode de tri pour gérer ces cas-là ?

    Merci.

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par aharel Voir le message
    Le soucis c'est que le tri par défaut sur la stringlist ne gère pas bien l'ordre alphabétique quand il y a des chiffres dans les chaines.
    Bonjour,

    Il gère parfaitement le tri ALPHABETHIQUE.

    Si dans les dictionnaires il y avait des chiffres et que vous cherchiez ce que veut dire 52 vous iriez à la "lettre" 5 et trouveriez 5 mais aussi 51,52,...59 etc..

    Il est plus exacte de dire que ça ne tri pas comme vous le souhaitez.

    Si vous écriviez vos éléments en mettant les zéros non significatifs devant les nombres le tri alphabétique fonctionnera comme vous le souhaitez :

    He-05
    ...
    Zn-05
    Zn-06
    ...
    Zn-49
    Zn-59
    Zn-60
    Zn-61
    Zn-61m
    Zn-61n
    Zn-68
    Zn-69
    Zn-69m

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 174
    Points : 38
    Points
    38
    Par défaut tri alphabétique chaine contenant des chiffres
    Effectivement vu comme ça.
    Mais le soucis c'est que je ne vais pas reformatter mes éléments en mettant les zéros non significatifs devant les nombres. Je veux afficher mes chaines de la liste telles quelles.
    Il faut donc que j'utilise un CustomSort sur la TStringList.

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    J'avais bien compris, mais je vous ai donné une piste.

    Vous formatez vos nombres juste pour les trier, pour l'affichage vous utilisez la chaîne non formatée.

    Enfin c'est une idée.

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 795
    Points : 5 581
    Points
    5 581
    Par défaut
    Dans une TStringList on peut associer un Objet à chaque item.
    Ainsi, il suffit de laisser le 0 significatif comme le suggère Barbibulle et de stocker la valeur sans le 0 significatif dans la propriété Objects[x] de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyStringList.Strings[x] := 'He-05';
    MyStringList.Objects[x] := 'He-5';
    Le trie s'effectuera correctement et la bonne valeur sera toujours disponible dans Objects[x].

Discussions similaires

  1. trier des chaines contenant des chiffres
    Par Jerome38190 dans le forum Langage
    Réponses: 3
    Dernier message: 30/04/2010, 10h50
  2. [langage] Comparaison de chaîne
    Par Fastshadow dans le forum Langage
    Réponses: 7
    Dernier message: 05/09/2004, 19h58
  3. comparaison de chaines de caracteres en PLSQL
    Par biozaxx dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/08/2004, 10h41
  4. Comparaison de chaines
    Par Marc_P dans le forum Linux
    Réponses: 6
    Dernier message: 17/02/2004, 18h04
  5. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 23h41

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