Trier par date lors d'un findfirst/findnext [Résolu]

padsou 121 Messages postés jeudi 24 janvier 2002Date d'inscription 13 avril 2010 Dernière intervention - 13 sept. 2005 à 10:03 - Dernière réponse : padsou 121 Messages postés jeudi 24 janvier 2002Date d'inscription 13 avril 2010 Dernière intervention
- 15 sept. 2005 à 10:45
bonjour à tous !



je cherche des fichiers dans un répertoire donné et je rempli un
tstringlist avec les noms de fichiers. Je souhaiterai trier ces
fichiers dans mon tstringlist par leur date de modification ou
création, bref du plus ancien au plus récent ! Merci d'avance
Afficher la suite 

4 réponses

Répondre au sujet
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 15 sept. 2005 à 09:32
+3
Utile
Te complique pas la vie pour cela et utilise la fonction ExtractFileName.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Delphiprog
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 14 sept. 2005 à 21:20
+1
Utile
Si le problème est toujours d'actualité, voici une proposition de solution commentée.

implementation

{$R *.dfm}
type
{Comme la structure TSearchrec n'est pas utilisable tel quel,
  on utilise une classe pour l'emballer}
  TSearchRecObj =   class (TObject)
    Sr: TSearchRec;
  end;

{Fonction de tri personnalis&#233; en fonction des dates des fichiers}
function SortList(List:TStringList;Index1,Index2:Integer):Integer;
var
  Obj1, Obj2: TSearchRecObj;
begin
{R&#233;cup&#233;rer les objets point&#233;s par la liste
  de chaines apr&#232;s transtypage}
  Obj1 : = TSearchRecObj(List.Objects[Index1]);
  Obj2 :=  TSearchRecObj(List.Objects[Index2]);
  {Comparaison "classique" en ordre croissant}
 if  Obj1.Sr.Time < Obj2.Sr.Time then
    Result : = -1
else
if Obj1.Sr.Time > Obj2.Sr.Time then
      Result :=  1
else
      Result := 0;
 end ;

procedure TForm1.Button1Click(Sender: TObject);
var
  Sr: TSearchRec;
  SrObj: TSearchRecObj;
  Sl: TStringList;
  i: integer;
begin
  Memo1.Clear;
  Sl : = TStringList.Create;
  try
if FindFirst('*.*', faAnyFile - faDirectory, Sr) =  0then
begin
repeat
{Cr&#233;er un wrapper de TSearchRec pour
        chaque fichier trouv&#233;}
        SrObj := TSearchRecObj.Create;
        SrObj.Sr := Sr;
        {Ajout &#224; la liste}
        Sl.AddObject(DateTimeToStr(FileDateToDateTime(Sr.Time))+ ' - ' + Sr.Name, SrObj);
       until  FindNext(Sr) <> 0;
      FindClose(Sr);
    end;
    {Tri de la liste de chaines}
    Sl.CustomSort(SortList);
    {Visualisation du r&#233;sultat}
    Memo1.Text : = Sl.Text;
  finally
{Destruction des objets point&#233;s par la liste}
for i :=  Sl.Count - 1 downto 0do
      Sl.Objects[i].Free;
    { Destruction de la liste de chaine }
    Sl.Free;
  end;
end;

Contr&#244;les n&#233;cessaires :
1 TButton
1 TMemo (pour contr&#244;ler le r&#233;sultat (pas utile en production)


<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
padsou 121 Messages postés jeudi 24 janvier 2002Date d'inscription 13 avril 2010 Dernière intervention - 15 sept. 2005 à 09:29
0
Utile
ça marche impeccable merci mais désormais pour récuperer, uniquement le nom du fichier (parce que c'était un peu le but lol) je dois découper la chaine en fonction d'un caractère séparateur, non ?
Commenter la réponse de padsou
padsou 121 Messages postés jeudi 24 janvier 2002Date d'inscription 13 avril 2010 Dernière intervention - 15 sept. 2005 à 10:45
0
Utile
G.E.N.I.A.L. ! Merci infiniment !
Commenter la réponse de padsou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.