0
我正在尝试逐行读取和解析文件,但在导致奇怪行为的文件末尾存在某种分隔符。制表符分隔文件中的流氓字符导致错误
以下是该文件的行我读的样子:
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
很酷谢谢你!我通过这样做来修复它:cat Changes.AMEX.0202.txt | sed's/\ r //'> out – 2012-02-15 11:40:39
跳过使用额外的过程。 sed从指定的文件名作为其参数:sed'...'Changes.AMEX.0202.txt> out – JRFerguson 2012-02-15 13:02:38
@JFFerguson:成本最低的解决方案是在Perl本身中进行替换。 – choroba 2012-02-15 15:40:05