作者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/cn.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