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 :

ordre et FindFirst


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 3
    Points : 3
    Points
    3
    Par défaut ordre et FindFirst
    Salut

    Pour parcourir l'ensemble des fichiers d'un dossier, j'utilise une procédure standard à base de FindFirst et de FindNext, qui a toujours très bien fonctionné en me donnant les fichiers dans l'ordre alphabétique croissant.

    J'ai récemment testé un programme utilisant cette procédure sur un dossier d'une clef USB; les fichiers sont apparus dans l'ordre de taille décroissante (ce que j'ai cru au départ être dans le désordre le plus total) !!
    Je précise que le fait de trier les fichiers dans l'explorateur de WIndows ne change rien à l'affaire.

    Quelqu'un a-t-il déjà rencontré cette situation ? Y-a-il une explication ? A priori, cela semble être un problème matériel lié à la clef USB (formatage ?)

    Y-a-il un moyen de revenir à la situation normale (c'est-à-dire en utilisant FindFirst, etc... directement et sans trier après coup) ?



    Merci

  2. #2
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Salut,

    après petite recherche dans l'aide, j'arrive à la conclusion que comme rien ne permet de spécifier l'ordre de tri dans la fonction findFirst, ça doit forcément se faire par une autre fonction.

    Je n'ai pas trouvée laquelle, et tu dis que changer l'ordre de tri via l'explorateur n'y change rien.

    PS : il est possible que via une commande ShellExecute tu puisses arriver à trier le répertoire directement depuis ton programme, avant le findFirst, et ainsi arriver à tes fins.

    PS2 : mais bon, normalement shellExecute est censé avoir le même effet que faire le tri toi même dans l'explorateur comme tu l'as fait, alors bon... M'enfin, à essayer.

    PS3 : ha mince, Sony l'a déjà sortie.

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Bonne année,

    Nulle part il n'est spécifié qu'il existe un ordre particulier avec les fonctions FindFirst, FindNext. Le mieux est de considérer que l'ordre est totalement aléatoire.

    Si tu veux obtenir une liste triée, il faut donc stocker le résultat du parcours FindFirst, FindNext (et ne pas oublier FindClose) dans une structure "triable" en mémoire telle qu'un tableau et ensuite appliquer un algorithme de tri. L'inconvénient est que l'arborescence parcourue ne doit pas être "colossale" car la mémoire va souffrir... et ton programme aussi.

    Y a pas de miracle, c'est ce que fait l'explorateur de Windows. Les opérations réalisées sur la liste interne de l'explorateur n'affectent en rien le résultat obtenu dans ton code et d'ailleurs cette liste n'est pas accessible, à ma connaissance.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Dans ce cas le mieux à ma connaissance sera de stocker la liste des noms de fichier dans un TStringList, car un objet de ce type peut être trié automatiquement (par ordre croissant uniquement par contre).
    Le double avantage est qu'il pourra aussi stocker dans l'objet de chaque item de la liste, un objet dont il pourra définir la classe lui même, et donc y mettre toutes les infos qu'il veut relatives au fichier (taille, dates, type, etc...).

    Si il utilisait un TFileListBox, il aurait peut être le problème de la clé USB (tri bizarre). Alors qu'avec le TStringList il aura à coup sûr le tri par ordre croissant alphabétiquement.

    EDIT : remarque, il a tout à gagner à utiliser les deux, le TFileListBox pour charger facilement tout les fichiers d'un répertoire, et un TStringList comme indiqué au début du post, qu'il chargera simplement depuis le TFileListBox.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    Salut,

    FindFirst reprend les fichiers dans l'ordre de création dans le dossier.
    Maintenant si tu utilises une StringList, tu peux faire un tri personnaliser avec la méthode CustomSort de TStringList.

    Jeankiki

Discussions similaires

  1. [CR8] Groupes nommés par ordre spécifié
    Par PschittN dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/05/2004, 23h46
  2. ORDER BY dans un ordre inhabituel
    Par Riam dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/03/2003, 13h29
  3. Question : ordre des bits ?
    Par Choupi dans le forum C
    Réponses: 3
    Dernier message: 11/02/2003, 06h22
  4. Ordre de parcours de l'arbre...
    Par Sylvain James dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 01/12/2002, 18h41
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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