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 :

Trier une liste de dossiers et de fichiers


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Trier une liste de dossiers et de fichiers
    Je dois trier l'arborescence suivante :
    test
    2005
    12
    13
    1
    2
    2006
    6
    1
    3
    ...

    J'aimerais avoir
    Test
    2005
    1
    2
    12
    13
    2006
    1
    3
    6

    J'ai créer une fontion qui retrace tous les fichiers et dossiers de cette arborescence mais comment puis-je faire pour trier numériquement les dossiers. En renommant les dossiers 1, 2, 3 en 01, 02 et 03 ça règle mon problème. Comment faire autrement.

    Voici ma procédure :

    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
    37
    38
    procedure TForm1.ListerTousFichier(const Chemin, Fichier,
      RacineWeb: string; const InDir: boolean; var listFichier: TStrings);
    var
      Rec  : TSearchRec;
      Path, strNouvPath : string;
    begin
      Path := IncludeTrailingBackslash(Chemin);
      //Cherche tous les fichiers seulement
      if FindFirst(Path + Fichier, faAnyFile - faDirectory, Rec) = 0 then
        try
          repeat
           //listFichier.Add({Path} + Rec.Name);
           //Enlève le chemin local et le "\" final
           //Remplace les "\" par des "/" pour le protocole HTTP
           strNouvPath := StringReplace(Copy(Path,Length(chemin)+2,Length(Path)),'\','/',[rfReplaceAll]);
           listFichier.Add('_____'+Rec.Name);
          until FindNext(Rec) <> 0;
        finally
          FindClose(Rec);
        end;
     
      //Si n'est pas dans un fichier
      If not InDir then Exit;
     
      //Cherche le prochain dossier
      if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
        try
          repeat
            if (Rec.Attr = faDirectory) and (Rec.Name<>'.') and (Rec.Name<>'..') then
            begin
              listFichier.Add('#'+Rec.Name);
              ListerTousFichier(Path + Rec.Name, Fichier, RacineWeb,True,listFichier);
            end;
           until FindNext(Rec) <> 0;
        finally
          FindClose(Rec);
        end;
    end;
    Merci de votre aide,
    Steve

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut Re: Trier une liste de dossiers et de fichiers
    Citation Envoyé par steveleg
    Je dois trier l'arborescence suivante :
    test
    2005
    12
    13
    1
    2
    2006
    6
    1
    3
    ...

    J'aimerais avoir
    Test
    2005
    1
    2
    12
    13
    2006
    1
    3
    6

    J'ai créer une fontion qui retrace tous les fichiers et dossiers de cette arborescence mais comment puis-je faire pour trier numériquement les dossiers. En renommant les dossiers 1, 2, 3 en 01, 02 et 03 ça règle mon problème. Comment faire autrement.

    Voici ma procédure :

    procedure TForm1.ListerTousFichier(const Chemin, Fichier,
    RacineWeb: string; const InDir: boolean; var listFichier: TStrings);
    var
    Rec : TSearchRec;
    Path, strNouvPath : string;
    begin
    Path := IncludeTrailingBackslash(Chemin);
    //Cherche tous les fichiers seulement
    if FindFirst(Path + Fichier, faAnyFile - faDirectory, Rec) = 0 then
    try
    repeat
    //listFichier.Add({Path} + Rec.Name);
    //Enlève le chemin local et le "\" final
    //Remplace les "\" par des "/" pour le protocole HTTP
    strNouvPath := StringReplace(Copy(Path,Length(chemin)+2,Length(Path)),'\','/',[rfReplaceAll]);
    listFichier.Add('_____'+Rec.Name);
    until FindNext(Rec) <> 0;
    finally
    FindClose(Rec);
    end;

    //Si n'est pas dans un fichier
    If not InDir then Exit;

    //Cherche le prochain dossier
    if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
    try
    repeat
    if (Rec.Attr = faDirectory) and (Rec.Name<>'.') and (Rec.Name<>'..') then
    begin
    listFichier.Add('#'+Rec.Name);
    ListerTousFichier(Path + Rec.Name, Fichier, RacineWeb,True,listFichier);
    end;
    until FindNext(Rec) <> 0;
    finally
    FindClose(Rec);
    end;
    end;

    Merci de votre aide,
    Steve
    Bonjour Steve,

    Au lieu d'utiliser un objet TStrings peut-être pourrais-tu utiliser un objet TStringList qui te permettrait d'utiliser la méthode CustomSort. En utilisant CustomSort, il t'est possible de comparer les valeurs comme tu les veux (en les convertissant en Integer au moment de la comparaison par exemple) à l'aide de la méthode callback passé en paramêtre à CustomSort.

    Je t'invite à consulter l'aide de Delphi à ce propos.

    Bon dev!

    -Slimjoe

    P.S.
    Pour aider les utilisateurs de ce forum à bien comprendre tes questions, je t'invite également à utiliser les balises code et à bien indenter ton code. Ça augmente considérablement la lisibilité .

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 21
    Points : 18
    Points
    18
    Par défaut merci
    Merci de votre réponse rapide. Je vérifie les possibilité aujourd'hui.

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

Discussions similaires

  1. [OL-2010] VBA - Dans un comboBox Trier une liste provenant d'un fichier TXT
    Par marycaLou dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 06/02/2015, 15h50
  2. Réponses: 5
    Dernier message: 03/01/2008, 16h07
  3. trier une list
    Par elekis dans le forum C++
    Réponses: 4
    Dernier message: 23/03/2006, 12h01
  4. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 11h17
  5. [Debutant(e)]Trier une liste
    Par LeDébutantJava dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/08/2004, 12h44

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