[PERL] Problème d'espace avec glob()

Problème d'espace avec glob() [PERL] - Perl - Programmation

Marsh Posté le 11-06-2009 à 09:50:49    

Bonjour,
 
J'utilise la fonction glob() pour lister le contenu d'un répertoire.
Mais si il y a un espace dans le chemin alors c'est "découpé".
 
Un exemple :

use strict;
use warnings;
 
my $SOURCE = "C:/Documents and Settings/toto/Desktop/a/*";
my @LISTFIC;
 
 foreach (glob ($SOURCE)) {
           print ": $_ \n";
    if (-f) {push(@LISTFIC,$_);}
 }
 my $nbfic = scalar(@LISTFIC);
 print("\n\n Nombre de fichiers : $nbfic \n" );


 
Résultat :

: C:/Documents
: and
 
 
 Nombre de fichiers : 0


 
 
Le chemin "C:/Documents and Settings/toto/Desktop/a/*" est considéré comme 3 entrées différentes à cause des espaces.
Comment remédier à ça ?


Message édité par sephiburp le 11-06-2009 à 09:51:33
Reply

Marsh Posté le 11-06-2009 à 09:50:49   

Reply

Marsh Posté le 11-06-2009 à 12:12:57    

il faut utiliser la fonction bsd_glob de File::Glob au lieu de CORE::glob qui a ce comportement connu.
Un truc comme ça devrait le faire

Code :
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4.  
  5. use File::Glob qw(bsd_glob);
  6. my $SOURCE = "C:/Documents and Settings/toto/Desktop/a/*";
  7. my @LISTFIC;
  8.  
  9. foreach (bsd_glob ($SOURCE)) {
  10.    print ": $_ \n";
  11.    if (-f) {push(@LISTFIC,$_);}
  12. }
  13. my $nbfic = scalar(@LISTFIC);
  14. print("\n\n Nombre de fichiers : $nbfic \n" );
 

(Noter qu'en sortie, tes fichiers sont au format unix, avec des séparateurs /. Pour avoir un format a la DOS, avec des séparateurs \, faire: my $SOURCE = 'C:\Documents and Settings\toto\Desktop\a\*';)
A+,


Message édité par gilou le 11-06-2009 à 15:33:27

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

Marsh Posté le 11-06-2009 à 14:47:00    

Nickel !
 
Merci beaucoup.

Reply

Marsh Posté le 11-06-2009 à 17:33:04    

tu peux aussi utiliser opendir()

Reply

Sujets relatifs:

Leave a Replay

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