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 Perl Discussion :

Déterminer les fichiers et les dossiers


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut Déterminer les fichiers et les dossiers
    Bonjour tout le monde,

    Je veux déterminer tous les chemins des fichiers et des répetoires qui sont sous une racine qui sert comme argument d'entrée.

    Par exemple : le chemin de la racine qui est a/b/racine

    et ça doit me donner une liste de ts les dossiers et de ts les fichiers qui sont sous a/b.

    N'importe quelle astuce sera la bienvenue.

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Soit tu utilises les fonctions opendir/readdir/closedir, soit tu utilises un glob, soit tu utilises le module File::Find (ou l'un des modules dérivés à l'interface plus élégante comme File::Finder ou File::Find::Rule).

    --
    Jedaï

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    oki, je pense klmodule sera plus efficace, merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    EN fait g jamais utilisé ce module, tu peux me diriger si tas deja eu loccasion de bosser avec?

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    De quel module parles-tu ? File::Find ?
    As-tu lu sa documentation ? Oui je sais que son interface est un peu agressive pour un débutant en programmation, c'est pour ça que j'ai suggéré plutôt File::Finder ou File::Find::Rule...
    Mais si tu préfères te servir uniquement de modules du CORE, et que ton objectif est réellement de récupérer une liste de tous les fichiers dans les dossiers et sous-dossier sous une racine /a/b, le code suivant conviendra :
    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
    #!/usr/bin/env perl
    use strict;
    use warnings;
     
    use File::Find;
     
    find( \&push_filename, '/a/b' );
    my @files_and_dirs;
    sub push_filename {
      push @files_and_dirs, $File::Find::name;
    }
     
    # travail avec la liste
     
    __END__
    Néanmoins, la plupart du temps quand on demande une telle liste, ce qu'on veut réellement c'est faire quelque chose à tous les éléments de cette liste, et de plus on ne veut en réalité que les véritables fichiers (pas les liens symboliques, pas les pipes, pas les répertoires), et dans ce cas le programme ressemble plutôt à ça :
    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
    #!/usr/bin/env perl
    use strict;
    use warnings;
     
    use File::Find;
     
    find( \&do_something_to_the_real_files, '/a/b' );
     
    sub do_something_to_the_real_files {
      if( -f $_ ) {
        # travail avec $_
      }
    }
     
    __END__
    L'avantage c'est qu'on a pas besoin ainsi de stocker une énorme liste inutile en mémoire.

    Attention, l'une des chausse-trappes de ce module est que le répertoire de travail du script est changé au cours de l'exécution de find(), en particulier dans la fonction de callback (le premier paramètre de find() ), lors de son exécution le répertoire courant est le répertoire du fichier qu'on est en train d'examiner (et dont le nom se trouve dans $_, alors que son chemin complet est dans $File::Find::name).

    --
    Jedaï

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    Je parlais de FILE::FIND. Wi tas raison , mon but et de collecter ts les chemins des fichiers ds un tableau et ts les chemins des dossiers ds un tableau. Bon je vais essayer de me docummenter alors...On mavait di ke je pouvais faire cela en 5 lignes, on verra bien ..

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par narmika
    On mavait di ke je pouvais faire cela en 5 lignes, on verra bien ..
    Mon premier script fait ça en 5 lignes, le reste est de la préparation pour l'ensemble du script.
    Si tu veux séparer les dossiers et les fichiers (on est bien d'accord que tu ne veux pas uniquement les dossiers et fichiers immédiatement en dessous de la racine ?), ceci fonctionnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    use File::Find;
    find( \&push_filename, '/a/b' );
    my(@files, @dirs);
    sub push_filename {
      push @files, $File::Find::name if -f $_;
      push @dirs, $File::Find::name if -d $_;
    }
    (Bon 7 lignes, j'admets, même si certaines sont pratiquement vides)

    --
    Jedaï

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    Si tu veux séparer les dossiers et les fichiers (on est bien d'accord que tu ne veux pas uniquement les dossiers et fichiers immédiatement en dessous de la racine ?),

    t'as di ceci, j'ai pas compris, je veux ts les dossiers et les fichiers qui sont sous la racine !!! ya une contradiction?

  9. #9
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Si tu as un répertoire /a/b/c, veux tu également lister les fichiers dans /a/b/c ? Ou veux tu uniquement les fichiers et dossiers directement dans /a/b mais pas le contenu des sous-dossiers ?

    De toute façon, essaie mon code et dis moi si le résultat te convient, ce sera plus simple.

    --
    Jedaï

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    ah mnt g compris, je veux ts les fichiers sous a/b ke ca soi sous a/b/c ou sous a/b/c/d...je veux parcourir tt ki se trouves sous la racine ke ca soit, des fichiers ou des dossiers . J'attends tes remark :

  11. #11
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par narmika
    J'attends tes remark :
    Tu n'attends pas mes remarques ! Tu essaies mon code et tu t'aperçois qu'il fait exactement ce que tu demandes.

    --
    Jedaï

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    Ok, je suis d'accord avec toi, pr les remark je ne visais pas le code , c jsute des remarkes concernan ce ke g compris c tt. en tt cas merci pr ton aide.

  13. #13
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par narmika
    Ok, je suis d'accord avec toi, pr les remark je ne visais pas le code , c jsute des remarkes concernan ce ke g compris c tt. en tt cas merci pr ton aide.
    Traduction :
    Ok, je suis d'accord avec toi. Pour ce qui est des remarques je ne visais pas ton code, je voulais juste des remarques concernant ce que j'ai compris, c'est tout ! En tout cas merci pour ton aide.
    Il est d'usage sur ces forums, comme sur la grande majorité des forums "sérieux", d'employer au possible un langage non-abrégé, non-SMS, de préférence orthographié correctement (cette contrainte est relâchée dans le cas d'étrangers, bien sûr). En effet sur un forum, et contrairement à une messagerie instantanée, on a le temps de rédiger ses messages, de s'appliquer à la rédaction d'un texte compréhensible au premier coup d'oeil par n'importe qui, et pas d'une suite de mots de 3 lettres avec une abréviation tout les deux mots, qu'on finit par devoir faire l'effort de décoder. De plus le nombre de symbole dans un message n'est pas limité (ou plutôt la limite est bien supérieure à la taille moyenne des messages) et on ne paye pas de surplus.

    Je te prierais donc de faire un effort à l'avenir pour éviter les abréviations et les raccourcis, tu y gagneras de ton côté puisque plus de gens se révèleront susceptible de répondre à tes questions, plus rapidement, car elles ne seront plus rebouté par ton langage et comprendront mieux tes problèmes.

    Merci d'avance.

    Je n'ai pas compris ce post à vrai dire : comment pourrais-je faire des remarques sur ce que tu as compris alors que tu ne m'en as rien dit ?

    --
    Jedaï

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    J'accepte vos critiques. Je ne me suis pas donnée l'occasion de lire tous les règles de ce forum. Il faut que vous sachiez que c'est pas la première fois que je participe. On m'a pas signalée ceci dans mes participations précédentes, sinon j'aurais fait très attention. Il y'a un volet que j'ai pas saisi, mes mots étaient quand même assez clairs.

    - C'est tout == c tt. ( Et c'est assez courant d'employer ces abbréviations)

    Franchement, j'ai l'impression que vous avez fait la remarque juste pour critiquer. Imaginez alors que je n'ai pas un bon français pour éviter toute faute d'orthographe, et que je suis une étrangère ( non française ce qui est le cas) je serais très blessée quand même.

    En tout cas je ne suis pas si succeptible. Vous avez pris la peine d'écrire tout un paragraphe pour deux abbréviations utilisées dans ma phrase. Veuillez , accepter alors toutes mes excuses , si j'ai commis alors une fraude qui mérite la sanction.

  15. #15
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je sais que ce n'est pas la première fois que tu participes, de plus tu remarqueras que je n'ai pas fait la critique au début du sujet. Pourquoi d'après toi ? Simplement parce que si tu suis le fil de ce sujet tu t'apercevra que de plus en plus d'abréviations se sont glissés d'un message à l'autre... Je tenais simplement à prévenir une tentation à poursuivre plus avant dans cette voie.
    Remarque que je n'ai pas fait de remarque sur ton orthographe directement, j'ai simplement fait allusion à l'orthographe dans le cadre plus général de l'étiquette de rédaction sur ce forum et précisé soigneusement qu'une telle règle ne s'appliquait évidemment pas aux non francophones de naissance (mais une telle particularité n'excuse pas l'emploi des abréviations).

    Tes messages restent très acceptables par rapport à certains que j'ai eu l'occasion d'admirer... Récemment encore j'ai eu un cas impressionnant que tu n'as pas eu la chance de lire car je l'ai direct viré au parking (texte tout en couleur, constitué quasi exclusivement d'abréviations, question n'ayant aucun rapport avec Perl bien sûr... Très joli). Je ne critique pas pour critiquer, c'est simplement qu'en tant que l'un des modérateurs du forum j'ai entre autre pour tache d'assurer une lisibilité la meilleure possible pour les posts ici.

    Je t'assure par ailleurs que c'est complètement dans ton intérêt de suivre cette règle : les messages bien présentés reçoivent systématiquement une attention plus soutenue de la part de leur lecteur, les statistiques sont plus que formelles, et c'est presque encore plus vrai sur le net (oups une abréviation), où les mauvais exemples sont légions.

    --
    Jedaï

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    Je comprends votre intervention . Je n'ai pas fait attention pour les mots flashs. Je vous souhaite une très bonne continuation. (Je tâcherai à me rappeler que c'est un forum professionnel). Merci pour votre aide en tout cas.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/08/2007, 12h46
  2. Enumerer les fichiers d'un dossier
    Par Zazeglu dans le forum C
    Réponses: 5
    Dernier message: 10/03/2006, 22h28
  3. Réponses: 5
    Dernier message: 18/01/2006, 14h05
  4. [LG] Accéder à tous les fichiers d'un dossier
    Par arno15 dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2005, 10h18

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