[PERL] Présence d'un espace immaginaire

Résolu/Fermé
TMart Messages postés 63 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 25 mars 2011 - 3 févr. 2009 à 17:32
TMart Messages postés 63 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 25 mars 2011 - 4 févr. 2009 à 09:04
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
3 févr. 2009 à 18:26
Salut,

return "@fichiers";
mets
return @fichiers; 
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
3 févr. 2009 à 18:34
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 lundi 2 juillet 2007 Statut Membre Dernière intervention 25 mars 2011 7
4 févr. 2009 à 09:04
Merci beaucoup lami20j !!

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