+ -
当前位置:首页 → 问答吧 → 请教各位高手一个问题

请教各位高手一个问题

时间:2011-04-07

来源:互联网

有两个文件:
A:
no        name       
1        wang
1        zhao
2        li
3        lu
3        sun
4        liu

B:
no        age        city
1        19        bj
1        30        nj
2        21        hb
2        17        cd
3        40        wh
4        41        dj

合并后:
no        name        age
1        wang        19
1        wang        30
1        zhao        19
1        zhao        30
2        li        21
2        li        17
3        lu        40
3        sun        40
4        liu        41

也就是说用SQl::Library和DBI:AnyData模块的话,只需要一句就搞定了:
select a.no,a.name,a.age from file1 as a,file2 as b where a.no = b.no;

但是大文件时,太耗内存,请问还有其他好的办法可以实现吗?谢谢

作者: dearll88   发布时间: 2011-04-07

补充:
我用循环套循环的方法实现了,不过太笨了,而且也经不起压力测试,100万条数据的测试情况下,很费时。
  1. open(IN1, <$f1) or die "open error : $!";
  2. open(OUT, ">$f2) or die "open error : $!";
  3. while($file1 = <IN1>){                  
  4.            @array1 = split(/\s/,$file1);
  5.         open(IN2, "<D:/perl_test/SQLMODE/100w2.txt") or die "open error : $!";
  6.         while($file2 = <IN2>){                  
  7.                    @array2 = split(/\s/,$file2);
  8.               if($array1[0] == $array2[0]){
  9.                              $array1[2] = $array2[1];
  10.                      print OUT (join "\t",@array1,"\n");
  11.               }
  12.                 }
  13.         close IN2;
  14. }
  15. close IN1;
  16. close OUT;
复制代码

作者: dearll88   发布时间: 2011-04-07