作者yalent ( 心只有妳 )
看板Perl
標題[問題] 一次讀兩個檔以上
時間Fri Apr 18 00:07:40 2014
小弟又有個問題想請教各位朋友
A檔案內容是
10013240 臺灣省屏東縣滿州鄉
10013280 臺灣省屏東縣瑪家鄉
10014070 臺灣省臺東縣東河鄉
10014140 臺灣省臺東縣金峰鄉
10015060 臺灣省花蓮縣壽豐鄉
..
B檔案內容是
10014070
10015060
10015060
10013240
...
我想一次讀兩個檔,當B的內容比對到與A前面的數字相同時,
將B檔案的內容取代成A檔案後面的字串
所以B檔案會變成如下
臺灣省臺東縣東河鄉
臺灣省花蓮縣壽豐鄉
臺灣省花蓮縣壽豐鄉
臺灣省屏東縣滿州鄉
....
我的寫法如下:
---
my $ina = "A.txt";
my $inb = "B.txt";
open (FILEa , "<". $ina);
open (FILEb , "<". $inb);
while(<FILEb>){
if ($_ =~ /(\d+)/){
$n1=$1;
while(<FILEa>){
chomp;
if ($_ =~ /(\d+)\s+(\S+)/){
$m1=$1;
$m2=$2;
if ($n1 == $m1){
print "$m2\n";
}
}
}
}
}
---
不過看起來有問題,幾乎都沒有比對到,
請問我的寫法哪裡有問題嗎?
感謝大家~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.131.58
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Perl/M.1397750862.A.639.html
※ 編輯: yalent (220.130.131.58), 04/18/2014 00:08:47
1F:→ uper:因為$n1=$1;的上一行是比對到空白才會 04/18 00:25
2F:推 tangcc:認B的內容的時候s是不是寫成小寫了 \s+ 04/18 00:25
3F:→ uper:這樣就無法得到你要的結果 04/18 00:27
※ 編輯: yalent (220.130.131.58), 04/18/2014 12:07:57
※ 編輯: yalent (220.130.131.58), 04/18/2014 12:08:06
4F:→ yalent:我已經修正比對數字 \s+ 改成 \d+,但是依然比對不到 @@ 04/18 12:08
5F:推 cutekid:while(<FILEa>) ←第一次就跑完了,第二次時就沒有東西囉 04/18 13:09
6F:推 AntaresStar:用Tie::File也不錯 不用擔心檔案被捲到底的問題 04/18 23:07
7F:→ hhs66317:第二個while循環之前﹐將FILEb移到開始的位置 06/01 09:55