看板 Perl 關於我們 聯絡資訊
小弟又有個問題想請教各位朋友 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://www.ptt.cc/bbs/Perl/M.1397750862.A.639.html ※ 編輯: yalent (220.130.131.58), 04/18/2014 00:08:47
uper:因為$n1=$1;的上一行是比對到空白才會 04/18 00:25
tangcc:認B的內容的時候s是不是寫成小寫了 \s+ 04/18 00:25
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
yalent:我已經修正比對數字 \s+ 改成 \d+,但是依然比對不到 @@ 04/18 12:08
cutekid:while(<FILEa>) ←第一次就跑完了,第二次時就沒有東西囉 04/18 13:09
AntaresStar:用Tie::File也不錯 不用擔心檔案被捲到底的問題 04/18 23:07
hhs66317:第二個while循環之前﹐將FILEb移到開始的位置 06/01 09:55