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
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
Il te faut utiliser la méthode CustomSort des TStringList :
C'est du brut pour classer uniquement sur l'heure, sans tenir compte si elle est valide ou pas...
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;
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![]()
bonjour,
Regarde dans l'aide l'exemple pour customsort et déclare tes procédures ainsi.
bon ce code est pondu à la main levée sans delphi, mais je suis sur que tu en comprendra le principe.
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;
a+
Partager