2017-10-16 3 views
0

Je travaille sur un script Perl qui vérifie le contenu d'un répertoire en utilisant glob, puis écrit la sortie dans un nouveau fichier. Mais chaque entrée du fichier est séparée en utilisant des espaces et j'en ai besoin pour imprimer chaque entrée dans une nouvelle ligne. Mon code est comme çaPerl - Enregistrer chaque entrée dans le fichier à la nouvelle ligne

open(New, ">/u/smanik/xyz.txt"); 

@files = glob('/user/manik/*.csv'); 
$size = @files; 

print "Total no of files: $size \n"; 

print New @files; 

open(New, "/user/manik/xyz.txt"); 
while (<New>) { 
    print "$_"; 
} 

close(New); 

Cela donne la sortie en imprimant dans le fichier comme

/user/manik/A.csv /user/manik/B.csv 

Mais je besoin à imprimer dans le fichier comme celui-ci

A.csv 
B.csv 
C.csv 

J'ai essayé en ajoutant \n dans la cinquième ligne, mais cela n'a pas fonctionné.

+0

Je ne pense pas qu'il y ait des espaces entre les deux. Si c'est votre code complet, il devrait être '/ user/manik/A.csv/user/manik/B.csv'. Peut-être avez-vous 'print New" @files "'? – simbabque

+0

'\ n' est newline, pas'/n' – xxfelixxx

+0

désolé pour misprint en fait je l'ai utilisé \ n que –

Répondre

0

Si vous voulez imprimer des retours à la ligne, vous devez le dire.

my @foo = (1, 2, 3); 
print @foo; 

Ce imprimera

C'est parce que le tableau @foo est considéré comme la liste des arguments à print, qui se contentera de sortie tous les arguments les uns après les autres.

my @foo = (1, 2, 3); 
print "@foo"; 

Maintenant, ce imprimera

1 2 3 

car un tableau à l'intérieur d'une double chaîne cité "" est interpolée en utilisant la $,output field separator, qui est un espace vide par défaut. Si vous souhaitez utiliser des retours à la ligne, le plus simple est join votre tableau avec \n, qui produit une seule chaîne comme argument pour print.

my @foo = (1, 2, 3); 
print join "\n", @foo; 

Cela vous donnera

1 
2 
3 
+0

Merci ce fait la tour.Mais j'ai aussi besoin de supprimer ce/user/manik/du début de chaque entrée –

+0

@ManikSharma si vous avez une nouvelle question, s'il vous plaît poser une nouvelle question. Mais je vous suggère d'essayer pour vous-même en premier. – simbabque

+0

J'ai une haine irrationnelle de la 'jointure d'impression' \ n ", @ foo' idiome! C'est principalement parce que je pense à '\ n' comme un terminateur d'enregistrement *, et non un séparateur d'enregistrements. En conséquence, je pense que "print" $ _ \ n "pour @ foo' (qui est le même nombre de caractères) ou" say for @ foo "est beaucoup mieux, mais n'hésitez pas à m'ignorer. – Borodin