请教各位高手一个问题
时间: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;
但是大文件时,太耗内存,请问还有其他好的办法可以实现吗?谢谢
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万条数据的测试情况下,很费时。
复制代码
我用循环套循环的方法实现了,不过太笨了,而且也经不起压力测试,100万条数据的测试情况下,很费时。
- open(IN1, <$f1) or die "open error : $!";
- open(OUT, ">$f2) or die "open error : $!";
- while($file1 = <IN1>){
- @array1 = split(/\s/,$file1);
- open(IN2, "<D:/perl_test/SQLMODE/100w2.txt") or die "open error : $!";
- while($file2 = <IN2>){
- @array2 = split(/\s/,$file2);
- if($array1[0] == $array2[0]){
- $array1[2] = $array2[1];
- print OUT (join "\t",@array1,"\n");
- }
- }
- close IN2;
- }
- close IN1;
- close OUT;
作者: dearll88 发布时间: 2011-04-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28