Разбойный символ в файле с разделителями табуляции, вызывающий ошибку - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь прочитать и проанализировать файл построчно, но в конце файла есть какой-то разделитель, вызывающий странное поведение.

Вот как выглядят строки файла, который я читаю:

20111129        AMEX    BHO     OTCBB   BHODD
20111129        AMEX    LCAPA   NASDAQ  LMCA

Код для чтения это просто:

my(@line) = <INFO>;
foreach $line(@line) {
    chomp( $line );
    my @vals = split('\t', $line);

    my $date = $vals[0];
    my $old_exch = $vals[1];
    my $old_symb = $vals[2];
    my $new_exch = $vals[3];
    my $new_symb = $vals[4];

    print "0> date '$date'\n";
    print "1> old Exch '$old_exch'\n";
    print "2> old symb '$old_symb'\n";
    print "3> new Exch '$new_exch'\n";
    print "4> new symb '$new_symb'\n";

Вывод выглядит так:

 0> date '20111129'
 1> old Exch 'AMEX'
 2> old symb 'BHO'
 3> new Exch 'OTCBB'
 '> new symb 'BHODD

так что в конце каждой строки появляется символ, который заставляет завершающий «печатать» в начале строки, стирая 4, которые должны там печататься. это похоже на символ, который сбрасывает, где печать должна происходить обратно в начало строки. Есть ли какой-нибудь способ «раздавить» этого мошенника? или, возможно, в моем коде есть какая-то ошибка, но у меня есть другие сценарии, которые делают что-то подобное ...

Большое спасибо Заранее!

Don

1 Ответ

4 голосов
/ 15 февраля 2012

Файл имеет окончания строки Windows.Мошеннический символ "\ r", вы можете удалить его с помощью регулярного выражения:

s/\r//;

Или вы можете указать слой :crlf при открытии файла.

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