制表符分隔文件中的Rogue字符导致错误

时间:2012-02-15 11:09:57

标签: perl

我试图逐行读取和解析文件,但是文件末尾有一些分隔符导致了奇怪的行为。

以下是我正在阅读的文件行:

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。它就像一个字符,重置打印应该发生在线的开头。有没有办法'扼杀'这个流氓角色?或者我的代码中可能存在某种错误,但我还有其他类似的东西......

非常感谢In Advance!

1 个答案:

答案 0 :(得分:4)

该文件具有Windows行结尾。流氓角色是“\ r”,您可以通过正则表达式删除它:

s/\r//;

或者,您可以在打开文件时指定:crlf图层。