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

Delphi Discussion :

Tri TStringList par heure


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Par défaut Tri TStringList par heure
    Bonjour,

    Je rempli unStringList avec une chaîne de caractères du style

    NomDuFichier1.doc 01/01/2007 15:00:00

    sur une dizaine de fichier .doc, les dates sont identiques et les heures différentes.
    comment puis-je trié par heures ?

    Merci

  2. #2
    Membre chevronné

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Par défaut
    Il te faut utiliser la méthode CustomSort des TStringList :

    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
    // Tri personnalisé
    function TriListe(LaListe: TStringList; Index1, Index2: Integer): Integer;
    var
      sTmp1, sTmp2: string;
    begin
    // Chaines à comparer
      sTmp1 := RightStr(LaListe[Index1], 8);
      sTmp2 := RightStr(LaListe[Index2], 8);
    // Valeur de retour pour classement
      if sTmp1 > sTmp2 then
        Result := 1
      else if sTmp1 < sTmp2 then
          Result := -1
      else
          Result := 0;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      lstListe : TStringList;
    begin
    // Liste exemple
      lstListe := TStringList.Create;
      lstListe.Append('toto.doc 01/01/2007 15:30:00');
      lstListe.Append('tata.doc 01/01/2007 15:00:00');
      lstListe.Append('tutu.doc 01/01/2007 16:30:00');
      lstListe.Append('titi.doc 01/01/2007 17:30:00');
    // Appel de la fonction de tri personnelle
      lstListe.CustomSort(TriListe);
    // Affiche le résultat
      ComboBox1.Clear;
      ComboBox1.Items.Assign(lstListe);
    // Libère les ressources
      lstListe.Clear;
      lstListe.Free;
    end;
    C'est du brut pour classer uniquement sur l'heure, sans tenir compte si elle est valide ou pas...

    Tu peux convertir complètement la date et l'heure en TDateTime pour faire ta comparaison, en gérant bien sur les cas d'erreur

  3. #3
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    bonjour,

    Regarde dans l'aide l'exemple pour customsort et déclare tes procédures ainsi.
    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
     
    //Compare: TStringListSortCompare
     
    function CompareMesfichiersParHeure(List: TStringList; Index1, Index2: Integer): Integer;
    Var
      S1, S2 : string;
      S1NameFic: string;
      S1DateFic: string;
    begin
      S1 := list[Index1];
      //  tu découpes ta chaine en deux morceaux
      // tu considères que ton format de date heure est fixe et composé des 20 derniers caractères.
      S1NameFic := copy(S1, 1, length(S1)-19);
      S1DateFic := copy(S1, length(S1)-19, length(S1));
     
     //  tu allignes toutes tes chaines sur 255 caractères pour la taille de
      fichier;
      S1NameFic := S1NameFic + les X espaces manquants pour faire une chaine de 255 +   S1DateFic;
     
    // La même construction pour S2NameFic
     
     if S1NameFic>S2NameFic then
       result := 1 
    else
     if S1NameFic<S2NameFic then
       result := -1 
    else
       result := 0;
     
     end;
    bon ce code est pondu à la main levée sans delphi, mais je suis sur que tu en comprendra le principe.

    a+

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Par défaut
    Merci de votre aide.
    c'est sympa.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Tri par heure
    Par lolocdm dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/10/2009, 17h31
  2. Tarif par heure
    Par naima2005 dans le forum Salaires
    Réponses: 2
    Dernier message: 31/10/2007, 19h22
  3. Calcul d'une quantité par heure
    Par orzra dans le forum C#
    Réponses: 6
    Dernier message: 12/06/2007, 13h28
  4. graphique heure par heure
    Par loric92 dans le forum Access
    Réponses: 1
    Dernier message: 09/02/2007, 17h26
  5. Tri alphabétique par pertinence
    Par tim22 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/01/2007, 21h32

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