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

Ada Discussion :

Parcours de dossier


Sujet :

Ada

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut Parcours de dossier
    Bonjour est ce qu'il existe une fonction en ada qui renvoie le nombre de fichier dans un répertoire ou une fonction qui parcours le dossier courant jusqu'à ce qu'il n'y est plus de fichier de manière récursive ou non ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    2 solutions, suivant le compilateur que tu as :

    1. avec un compilateur Ada 2005, tu as le package Ada.Directories, et les fonctions/procédures Start_Search, More_Entries et Get_Next_Entry qui doivent te permettre de faire ce que tu souhaites. Je n'ai pas testé, mais je crois qu'un algo du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    declare
       compteur : INTEGER := 0;
    begin
       Start_Search( Search, Directory, null );
       while More_Entries( Search ) loop
          compteur := compteur + 1;
          Get_Next_Entry( Search, Directory_Entry );
       end loop;
    end;
    devrait permettre de compter le nombre de fichiers dans un dossier (et seulement les fichiers).

    2. avec GNAT, tu as le package GNAT.Directory_Operations qui contient les procédures Open, Read et Close qui semble faire la même chose.

    Pour ce qui est de la recherche récursive, je n'ai rien vu qui pourrait le faire, mais je suis sûr qu'avec un peu de recherche dans le Reference Manual, tu trouveras la solution.

    Bon courage !

  3. #3
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Pour plus d'informations sur l'utilisation du package ada.directories, tu as toujours le rational (qui pour une fois est plutôt pas mal fait).

    http://www.adaic.org/standards/05rat/html/Rat-7-4.html

    Pour ce qui est de faire une recherche récursive, utilises cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function Kind(Name: String) return File_Kind;
    Dès que tu tombes sur un repertoire, tu le parcours (avec une fonction de parcours qui admet en paramètre le dossier, ça ne doit pas te prendre très longtemps)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    merci de vos réponses mais je ne comprends pas ce que font toute ses fonctions et qu'est ce que le type search_type ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    le type Search_Type définit un objet qui contient l'état d'une recherche.

    A sa déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    declare
       Recursive_Search : Search_Type;
    ...
    il ne contient aucune référence de recherche et le passer en argument à la fonction More_Entries te renverra false.

    Tu l'initialises en le passant en argument à la procédure Start_Search, qui prend en arguments:
    1. le Search_Type ;
    2. le répertoire sur lequel tu fais ta recherche ;
    3. un pattern de recherche sur les noms de fichier (qui, s'il vaut null matche tous les éléments du répertoire) ;
    4. et (optionellement) un filtre sur le type des fichiers, la valeur par défaut de ce dernier ne filtrant rien (la recherche s'effectue sur tous les types de fichiers, à savoir : fichier normal, fichier spécial et répertoire).

    Pour effectuer une opération sur tous les fichiers .doc d'un répertoire, tu feras appel à Start_Search de la manière suivante (exemple tiré du rationale):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    declare
       Doc_Search : Search_Type;
       Doc_Filter : Filter_Type := ( Ordinary_File => True, others => false );
    begin
       Start_Search( Doc_Search, "c:\le\repertoire\de\recherche", "*.doc", Doc_Filter);
    ...
    alors que pour compter tous les sous-répertoires d'un répertoire, il faudra faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    declare
       Sub_Folder_Search : Search_Type;
       Sub_Folder_Filter : Filter_Type := ( Directory => True, others => false );
    begin
       Start_Search( Sub_Folder_Search, "c:\le\repertoire\de\recherche", null, Sub_Folder_Filter);
    ...
    A ce niveau, ton objet de type Search_Type référence tous les éléments de ton répertoire matchant à la fois le pattern et le filtre.

    La boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
       while More_Entries( Search_Type_Object ) loop
          Get_Next_Entry( Search_Type_Object, Directory_Entry );
          -- Process Directory_Entry
       end loop;
    est en fait un itérateur classique qui va te permettre de parcourir tous les résultats trouvés lors de l'appel à Start_Search et référencé dans Search_Type_Object.

    La procédure End_Search permet de "nettoyer" toutes les références contenues dans ton objet Search_Type.

    La fonction Kind t'indique si le Directory_Entry de Get_Next_Entry est un fichier ordinaire, spécial ou un répertoire.

    Voilà, une explication détaillée du Reference Manual, tu as toutes les billes pour faire ce que tu souhaites.

    Bon courage !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    encore une fois merci

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

Discussions similaires

  1. Free + parcours de dossier
    Par yakiniku dans le forum Langage
    Réponses: 4
    Dernier message: 14/04/2010, 19h38
  2. Réponses: 2
    Dernier message: 26/02/2009, 11h23
  3. Agrandir fenêtre de parcours de dossier
    Par nicolas_151 dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/07/2008, 11h33
  4. Droits pour le parcours de dossier
    Par gazelle dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2007, 18h25

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