[問題] 一次讀兩個檔以上

看板Perl作者 ( 心只有妳 )時間10年前 (2014/04/18 00:07), 10年前編輯推噓3(304)
留言7則, 6人參與, 最新討論串1/2 (看更多)
小弟又有個問題想請教各位朋友 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

04/18 00:25, , 1F
因為$n1=$1;的上一行是比對到空白才會
04/18 00:25, 1F

04/18 00:25, , 2F
認B的內容的時候s是不是寫成小寫了 \s+
04/18 00:25, 2F

04/18 00:27, , 3F
這樣就無法得到你要的結果
04/18 00:27, 3F
※ 編輯: yalent (220.130.131.58), 04/18/2014 12:07:57 ※ 編輯: yalent (220.130.131.58), 04/18/2014 12:08:06

04/18 12:08, , 4F
我已經修正比對數字 \s+ 改成 \d+,但是依然比對不到 @@
04/18 12:08, 4F

04/18 13:09, , 5F
while(<FILEa>) ←第一次就跑完了,第二次時就沒有東西囉
04/18 13:09, 5F

04/18 23:07, , 6F
用Tie::File也不錯 不用擔心檔案被捲到底的問題
04/18 23:07, 6F

06/01 09:55, , 7F
第二個while循環之前﹐將FILEb移到開始的位置
06/01 09:55, 7F
文章代碼(AID): #1JJ_nEOv (Perl)
文章代碼(AID): #1JJ_nEOv (Perl)