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