[PERL] Présence d'un espace immaginaire

Résolu
TMart Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -  
TMart Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un petit souci avec mon script qui liste les dossiers d'un répertoire et les copie dans un fichier. De ce côté là tout est OK, j'ai juste un problème de mise en forme.

Effectivement au début de chaque ligne, j'aperçois l'apparition d'un espace et à la fin de mon texte une ligne blanche.
Et j'aimerai comprendre le pourquoi du comment.

Voici mon script :


use strict;use warnings;
my $repertoire;
my $chaine;
open F,'+<C:\Documents and Settings\TMart\Bureau\test.txt' or die "E/S : $!\n";
sub ListersFichiers
{

$repertoire = $ARGV[0];
my @fichiers;
# Ouverture d'un répertoire
opendir (my $FhRep,$repertoire) or die "impossible d'ouvrir le répertoire $repertoire\n";

# Liste fichiers et répertoire sauf (. et ..)
my @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);

# Fermeture du répertoire
closedir ($FhRep);

# On récupère tous les fichiers
foreach my $nom (@Contenu)
{
if (-d "$repertoire/$nom")
{
push(@fichiers,"$repertoire\\$nom","\n");
}
elsif (-d "$repertoire/$nom")
{
push(@fichiers,ListersFichiers("$repertoire\\$nom"));
}
}
return "@fichiers";
}
print F ListersFichiers($repertoire);
close F;


Voici le résultat dans le Txt :
*


1 D:\Boulot\Fichier Maison
2 D:\Boulot\Packet
3 D:\Boulot\Projet 2003
4 D:\Boulot\Projet Cablage
5 D:\Boulot\Projet Routage
6 D:\Boulot\Prosits
7 D:\Boulot\Ressources
8 D:\Boulot\Stage IDEUS
9 D:\Boulot\Workshop
10 "une ligne blanche"


Voilà, merci d'avance, TMart.
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

return "@fichiers";
mets
return @fichiers; 
1
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Explication
#!/usr/bin/perl
use strict;use warnings;

my @x=qw/x y z/;

# si on mets le tableau entre guillemets
# les éléments de tableau sont affichés
# avec un espace en tant que séparateur
print "@x\n";

# si on exécute print d'un tableau
# sans ls guillemts
# il n'y a pas de séparateur d'éléments
# à l'affichage
print @x;
print "\n";

# dans ton cas, il s'agit des fichiers
# et le parcours de dossier envoie le nom
# de fichier avec le saute de ligne à la fin
# ce qui donne un tableau de ce genre
# avec a\n, b\n, c\n comme nom de fichiers

my @c=("a\n", "b\n", "c\n");

# pas besoin de chomp dans ce cas vu que tu veux afficher
# un par ligne.

# En suivant l'exemple plus haut
# si on mets des guillemets
# alors les éléments seront affichés
# avec un espace en tant que séparateur
# ce qui donne
# 1er élément
#a suivi d'un saute de ligne
# le séparateur espace
# b suivi d'un saute de ligne
# le séparateur espace
# et ainsi de suite
#a
# b
# c
# etc.

print "@c\n";
print @c;
__END__
Exécution
lami20j@debian:~/trash$ perl ccm9_lister_repertoires.pl
x y z
xyz
a
 b
 c

a
b
c
1
TMart Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   7
 
Merci beaucoup lami20j !!

Non seulement ça marche et en plus j'ai compris !
0