2010-09-30 7 views
0

Cela va sembler extrêmement trivial, mais cela n'a tout simplement aucun sens pour moi.Perl Problèmes de sortie

je le snippit de code suivant:

foreach $i (@inputtext) 
{ 
@line = split(/\|/, $i); 
foreach $j (@line) 
{ 
    print "$j, "; 
} 
} 

L'entrée est trois des lignes suivantes, identiques:

98465895 | Aucune idée ce qui se passe ici | 123 partout voie | ville | ST | 55555 | data1 | pass1 | données2 | pass2 | data3 | pass3 | plus de choses

La sortie finit par être ce que:

98465895, aucune idée ce qui se passe ici, 123 partout voie, ville, ST, 55555, data1, pass1, données2, pass2, data3, pass3, plus de choses
, 98465895, aucune idée ce qui se passe ici, 123 partout voie, ville, ST, 55555, données1, pass1, données2, pass2, données3, pass3, plus de choses
, 98465895, Aucune idée de ce qui se passe ici, 123 n'importe où voie, ville, ST, 55555, données1, pass1, données2, pass2 , data3, pass3, plus de choses

Il n'y a aucune raison logique que je peux voir cela créer une ligne de fond dans une instruction d'impression, en jetant la virgule sur la ligne suivante, et chambouler les lignes suivantes de la sortie. Quelqu'un a des suggestions?

Merci

+0

'use strict; utiliser des avertissements; ' – Ether

Répondre

3

Nous ne pouvons pas voir ce qui est la lecture du fichier. Appellerez-vous chomp dans votre texte d'entrée pour se débarrasser de la nouvelle ligne de fuite?

En outre, au lieu de faire cette boucle for pour rejoindre les champs avec des virgules, faites ceci:

print join(', ', @line); 
+0

ouais, il était malheureusement aussi simple qu'une déclaration stupide chomp ... – ThePirateSheep

2

Je parie $i contient un saut de ligne avant split il. Essayez le chomp en premier.

1

Je ne suis pas sûr ce qui est avant ce code, mais je parie que c'est quelque chose comme ceci:

open FILE, 'filename'; 
@inputtext = <FILE>; 

Perl est optimisé pour vous d'aborder le problème différemment:

use strict; use warnings; # helps you avoid errors early 

open my $file, '<', 'filename' or die $!; 

while (<$file>) {     # loads the next line from $file into $_ 
    chomp;       # strip newline from $_ 
    print join ', ' => split /\|/; # split uses $_ without an arg 
    # or use split's output for anything else 
} 

Si vous utilisez ce code dans un sous-programme, assurez-vous de le faire avant la boucle while.

Questions connexes