fonction pour lister les fichiers d'un repertoire

fonction pour lister les fichiers d'un repertoire - Perl - Programmation

Marsh Posté le 01-04-2008 à 17:01:50    

salut,
 
 
J'ai trouver cette fonction pour lister les fichiers
 

Code :
  1. my ($repertoire) = @_;
  2.   my @fichiers = ();
  3.   opendir (my $rep_fh, $repertoire)
  4.     or die "impossible d'ouvrir le repertoire $repertoire\n";
  5.   my @file_rep = grep { !/^\.\.?$/ } readdir($rep_fh);
  6.   closedir ($rep_fh);
  7.  
  8.   foreach my $nom (@file_rep) {
  9.     if ( -f "$repertoire/$nom" ) {
  10.       push (@fichiers, "$repertoire/$nom" ); 
  11.     }
  12.   }
  13.   return @fichiers;


 
mais le truc c'est que je ne comprend pas tres bien la partie apres le grep;
j'ai essayer de la modifier pour ne recuperer dans mon repertoire
que les fichier qui contienne "TNE" et ceux qui ne commence  pas par "hbo" et "hba" mais elle me ramene tous les fichier dans le repertoire;
 
est ce que vous auriez une astuce ?
 
Merci

Reply

Marsh Posté le 01-04-2008 à 17:01:50   

Reply

Marsh Posté le 01-04-2008 à 17:08:04    

j'ai essayer comme ceci
mais il me retourne tout alors que j 'ai bien fait un grep
foreach my $liste (@listes)
{
if (!grep( /^hbo$/, $liste ) or !grep( /^hba$/, $liste ) or grep( /^TNE$/, $liste ))
{
print "$liste \n";
}
}

Reply

Marsh Posté le 02-04-2008 à 23:00:41    

et comme ça :
 
sub fonction
{
 
open(DOSSIER,"." );
my @entrees = readdir(DOSSIER);
closedir(DOSSIER);
 
edit, et pour ne récupèrer que ce qui t'intéresse tu utilises les regexp
du genre:
 
foreach $entrees (@entrees)
{
 if $entrees =~m/\.extension$/
 
(...)


Message édité par Chti Manson le 02-04-2008 à 23:05:17
Reply

Marsh Posté le 16-04-2008 à 20:42:34    

Les modules IO sont la pour ca (et idem pour Perl6)

Code :
  1. use IO::Dir;


 
Par exemple ici, pour lister les fichiers du repertoire passé en ligne de commande

Code :
  1. #!/usr/bin/perl -w
  2. use warnings;
  3. use strict;
  4. print "$ARGV[0] n'est pas un repertoire\n" and exit unless (-e $ARGV[0] and -d _);
  5. use IO::Dir;
  6. my $d = IO::Dir->new($ARGV[0]);
  7. if (defined $d) {
  8.     while (defined($_ = $d->read)) {
  9.         print $_, "\n" if (-f $_)
  10.     }
  11.     undef $d;
  12. }


A+,

Message cité 1 fois
Message édité par gilou le 16-04-2008 à 21:17:21

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-06-2012 à 11:07:57    

Bonjour
 
Juste une petite correction du code donnée par gilou car la liste des fichiers n'est pas dans le répertoire courant mais bien dans celui passé en paramètre ($ARGV[0]) :
 

gilou a écrit :

Les modules IO sont la pour ca (et idem pour Perl6)

Code :
  1. use IO::Dir;


 
Par exemple ici, pour lister les fichiers du repertoire passé en ligne de commande

Code :
  1. #!/usr/bin/perl -w
  2. use warnings;
  3. use strict;
  4. print "$ARGV[0] n'est pas un repertoire\n" and exit unless (-e $ARGV[0] and -d _);
  5. use IO::Dir;
  6. my $d = IO::Dir->new($ARGV[0]);
  7. if (defined $d) {
  8.     while (defined($_ = $d->read)) {
  9.         print $_, "\n" if (-f $ARGV[0]."/".$_)
  10.     }
  11.     undef $d;
  12. }


A+,


Reply

Marsh Posté le 13-06-2012 à 21:41:24    

Ou simplement faire un cd $ARGV[0] après avoir effectué la vérification initiale.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed