Проблемы с выходом Perl - PullRequest
       13

Проблемы с выходом Perl

0 голосов
/ 01 октября 2010

Это будет казаться чрезвычайно тривиальным, но для меня это не имеет никакого смысла.

У меня есть следующий фрагмент кода:

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

Ввод трех следующих строк, идентичных:

98465895 | Понятия не имею, что здесь происходит | 123 повсюду переулок | город | ST | 55555 | данные1 | пароль1 | данные2 | пароль2 | данные3 | пароль3 | другие материалы

Вывод в итоге будет таким:

98465895, Понятия не имею, что здесь происходит, 123 везде, переулок, город, ST, 55555, data1, pass1, data2, pass2, data3, pass3, другие вещи
, 98465895, Понятия не имею, что здесь происходит, 123 где угодно переулок, город, ST, 55555, data1, pass1, data2, pass2, data3, pass3, больше вещей
, 98465895, Понятия не имею, что здесь происходит, 123 где угодно переулок, город, ST, 55555, data1, pass1, data2, pass2, data3, pass3, больше вещей

Нет логической причины, по которой я вижу, что это могло бы создать конечную линию внутри оператора print, бросить запятую на следующую строку и испортить следующие строки вывода. У кого-нибудь есть предложения?

Спасибо

Ответы [ 3 ]

3 голосов
/ 01 октября 2010

Мы не можем видеть, что читает из файла.Вы вызываете chomp в своем входном тексте, чтобы избавиться от завершающего символа новой строки?

Кроме того, вместо выполнения цикла for для объединения полей с запятыми, сделайте следующее:

print join( ', ', @line );
2 голосов
/ 01 октября 2010

Бьюсь об заклад, $i содержит символ новой строки перед вами split его. Попробуйте chomp сначала.

1 голос
/ 01 октября 2010

Я не совсем уверен, что до этого кода, но держу пари, что-то вроде этого:

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

Perl оптимизирован для того, чтобы вы по-другому подходили к проблеме:

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
}

если вы используете этот код в подпрограмме, обязательно local $_; перед циклом while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...