begin process at 2012 02 11 08:05:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Aide et documentation

 > 

Tri numérique sur ListBox


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Tri numérique sur ListBox

mercredi 19 décembre 2007 à 15:58:26 | Tri numérique sur ListBox

f6dqm1

Existe t'il une possibilité de tri numérique automatique sur une ListBox dont tous les items commencent par des chiffres ? La fonction sorted ne marche pas car elle classe d'abord tous les chiffres qui commencent par 1 puis tous les chiffres qui commencent par 2 etc. Pas réellement ce que je cherche Hi ! Merci pour l'aide Gabriel
mercredi 19 décembre 2007 à 16:14:04 | Re : Tri numérique sur ListBox

cirec

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

pour que le trie fonctionne il faut ajouter des zéros devant les chiffres

001
002
011


 
@+
Cirec

mercredi 19 décembre 2007 à 18:56:13 | Re : Tri numérique sur ListBox

MAURICIO

Administrateur CodeS-SourceS
Tiré de ma fonction, partie oú je traite des doubles/Integers:

Lista étant une TStrings

var i, j, small : Integer;

      for i := 0 to Lista.Count - 2 do       
      begin
          small := i;

          smallVal := StrToFloat(Lista[i]);

          for j := i + 1 to Lista.Count - 1 do 
              if StrToFloat(Lista[j]) < smallVal
              then begin
                small := j;
                smallVal := StrToFloat(Lista[j]);
              end;

        if small <> i                           // Permuter
        then begin
          Str := Lista[i];
          Lista[i] := Lista[small];
          Lista[small] := Str;
        end;


Tu dois juste remplacer StrToFloat() par une fonction qui te renvoie l' integer de l'item!!!
A+
mercredi 19 décembre 2007 à 19:04:58 | Re : Tri numérique sur ListBox

MAURICIO

Administrateur CodeS-SourceS
Une autre façon serait de trier avant de passer les items dans ta liste.
Pour cela, tu peux passer par un Record et un Array:

type
  monRecord=Record
    Valeur: Integer;  // Valeur qui permettra de trouver le plus petit
    MaString; // String qui sera passée dans ta listBox
    Passé: Boolean;  // permet de savoir si on l' a déjá passé dans le listbox
  end;

Tu déclares un aArray comm suit:
Array_Items: Array of monRecord;

Ensuite tu remplies Array_Items avec les différents Items. (N' oublie pas le SetLength de l' array).
"Passé" devra être initialisé à false bien sûr ...

Enfin, tu cherches dans l' array le plus petit (oú Passé = "false") et tu le passes dans ta ListBox.
N' oublie pas de mettre "Passé" à True.

A+
mercredi 19 décembre 2007 à 19:52:36 | Re : Tri numérique sur ListBox

cirec

Membre Club Administrateur CodeS-SourceS
@Mauricio:

Ta méthode ne fonctionne que si les Items sont que des chiffres !!!!

Si ses Items contiennent aussi des lettres ... dans ce cas ça plante

Il dit bien "tous les items commencent par des chiffres"
ce qui sous-entend qu'ils contiennent aussi des lettres

Du coup il est plus facile de rajouter des zéros devant

ps : toutes les méthodes de tries réagissent de la même manière ...
donc pour obtenir un résultat correcte il faut ajouter des zéros

 
@+
Cirec

mercredi 19 décembre 2007 à 22:28:41 | Re : Tri numérique sur ListBox

MAURICIO

Administrateur CodeS-SourceS
Dans ma derniere phrase de mon 1er commentaire j' ai écrit:
"Tu dois juste remplacer StrToFloat() par une fonction qui te renvoie l' integer de l'item!!!"

Mon 2eme commentaire fonctionnerait aussi très bien ...

A+
mercredi 19 décembre 2007 à 22:52:01 | Re : Tri numérique sur ListBox

cirec

Membre Club Administrateur CodeS-SourceS
Pourquoi faire simple quand on peut faire compliqué

J'avais bien lu ton message
et j'ai même fait les testes qui s'imposent

StrToInt (par exemple) te renvoie une belle exception si la chaine contient des lettres !

ce qui implique qu'il faudrait créer une fonction qui récupère que les chiffres ... mais le trie ne sera pas juste puisque les lettres ne seront pas prise en compte !!!!

Alors que le simple fait d'ajouter des zéros en début permet d'utiliser la méthode de trie interne et sans code supplémentaire avec un résultat trier correctement jusqu'au dernier caractère

 
@+
Cirec

mercredi 19 décembre 2007 à 23:04:38 | Re : Tri numérique sur ListBox

cantador

Membre Club Administrateur CodeS-SourceS
çà me fait penser au coup du gars qui veut se faire un diaporama avec ses photos de vacances avec un logiciel tout fait..(photo1, photo2..photo12 etc etc)
et surprise lorsqu'il le lance tout est mélangé !
Alors que si bien sur il se dit tiens j'en ai 999 (il en raté une..) et il nomme ses fichiers :
photo001, photo002, photo047..photo238...photo999.
et là ca va nettement mieux..

cantador
jeudi 20 décembre 2007 à 00:26:50 | Re : Tri numérique sur ListBox

Caribensila

Membre Club
Salut,

« Qu'il y ait des gens beaucoup plus savants que d'autres n'est pas très intriguant. Ce qui est extraordinaire, et diablement instructif, c'est à quel point deux personnes ayant des connaissances proches peuvent diverger dans la façon dont elles les interprètent. »

C'est vachement enrichissant les gars !  ;)
jeudi 20 décembre 2007 à 09:20:46 | Re : Tri numérique sur ListBox

japee

Membre Club Administrateur CodeS-SourceS
Quelle que soit la manière dont on va traiter le problème, dans tous les cas, il va bien falloir une routine pour récupérer le nombre qui se trouve en début d'item et qui détermine le classement de la liste.

1 2 3 4

Cette discussion est classée dans : chiffres, listbox, tri, numérique, commencent


Répondre à ce message

Sujets en rapport avec ce message

Comment inverser le tri d'une listbox ? [ par thonyboy ] Bonjour,est t'il possible de changer l'ordre de tri d'un TListBox ?J'ai un TListBox avec la propriété Sorted a True. Les éléments sont triés de facon interdire Chiffres ou certains caractère dans listbox [ par petitpouce ] Bonjour à tous, Comment éviter la prise en compte des chiffres (ex: 45678) ou certains caractères ( ex: @) dans un listbox ? Merci de votre aide Tri d'une TListBox [ par l0sth34d2 ] Bonjour à tous!J'aimerais tout simplement savoir si c'est possible et si oui comment peut-on trier une ListBox selon l'ordre que l'on souhaite.Par exe Tri d'une listbox [ par l0sth34d2 ] Bonjour! C'est encore moi! Je reviens sur une question que j'avais déjà posé.. j'ai été redirigé vers une source d'une autre personne mais bon.. ça ne Query table en lecture seule [ par yvessimon ] Bonjour,Avec Query je crée et ouvre une table paradox.puis je fais un tri croissant ou non .suite à ce tri la table passe en lecture seule ce qui m'in Tri de base mysql [ par Oniria ] Bonjour,voila, j'aimerais savoir s'il existe une commande SQL qui ressemble à la fonction copy(..,..,..) de delphi.En effet, j'aimerais trouver par ex Déphasage audio numérique : détection [ par mbsofts ] Bonjour, je cherche un algo de détection de déphasage dans un fichier son.Si vous avez des algo à me filer ou des documentations à me conseiller, merc avoir 2 listbox identiques dans 2 pages d'un pagecontrol [ par morinxav2 ] Bonsoir,Je voudrais savoir comment synchronisé le contenue et les evenements de 2 listbox en temps reel (ou presque) qui se trouvent dans deux pages d


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales