perl 编程

while(<FILE1>){@v=split;($name1,$address1,$number1,$another1)=@v;$hash{$number1}=[$na... while(<FILE1>)
{@v=split;
($name1,$address1,$number1,$another1)=@v;
$hash{$number1}=[$name,$address,$number];
while(<FILE2>)
{@array=split;
($name,$address,$number,$another)=@array;
if(exists $hash{$number}){
print FILE3 "@v \n";}}}

目的是把目的是把test1中与test2 中具相同number的记录找出来,输到test3中,只输test1中的记录,test2中的就不管了,为什么得到的永远只有第一条有相同number的记录
展开
 我来答
willshdanvis
2012-03-30 · TA获得超过1018个赞
知道大有可为答主
回答量:2042
采纳率:100%
帮助的人:1392万
展开全部
while(<FILE1>)
{@v=split;
($name1,$address1,$number1,$another1)=@v;
$hash{$number1}=[$name1,$address1,$number1];
}
while(<FILE2>)
{@array=split;
($name,$address,$number,$another)=@array;
if(exists $hash{$number}){
print FILE3 "$hash{$number}\n";
}}
更多追问追答
追问
哦 对  应该是$hash{$number1}=[$name1,$address1,$number1];
print那一行也该是print $hash{$number1}吧?
但是这样也还是不对哦
我的数据是这样的
test1:
a b 123456 c
c d 11111 m
e f 256546 g
test 2:
c f 123456 c
a e 11111 n
b n 11111 l
这样test3中应该是
a b 123456 c
c d 11111 m
你这样得到的是
4行这样的东西:ARRAY(0x187a1a4)
追答
while()
{@v=split/\s/,$_;
$hash{$v[2]}=$_;
}
while()
{@array=split/\s/,$_;
if(exists $hash{$array[2]}){
print FILE3 "$hash{$array[2]}" unless(exists $hash1{$array[2]});
$hash1{$array[2]}=1;
}}
百度网友d580670
2012-03-30 · TA获得超过1984个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:748万
展开全部
print FILE3 "@v \n" ==》@array
追问
这是神马意思?》根本就识别不啊
追答
也就是说number字段在两个文件中不在同一列,可以使用正则匹配啊
while()
{@v=split/\s+/,$_;
for $i(0..$#v)
{
if($v[$i]=~/\d{6,12}/)
{
$hash{$v[$i]}=$_;last;
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猎人海贼
2012-03-30 · 超过23用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:48.7万
展开全部
if( $hash{$number}){print FILE3 "($name,$address,$number,$another) \n";}}}}
追问
没用,输出还多了一对括号,难看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式