Chinaunix首页 | 论坛 | 博客
  • 博客访问: 221836
  • 博文数量: 36
  • 博客积分: 1188
  • 博客等级: 军士长
  • 技术积分: 802
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 21:45
文章分类

全部博文(36)

文章存档

2020年(1)

2017年(2)

2015年(1)

2014年(1)

2013年(1)

2012年(3)

2011年(27)

分类: WINDOWS

2011-04-12 09:46:07

如file1:
1 a b c d e f g
2 a b c d e f g
file2:
1 h i j k l m n o p q r s t u v w x y z
2 h i j k l m n o p q r s t u v w x y z
合并为file:
1 a b c d e f g 1 h i j k l m n o p q r s t u v w x y z
2 a b c d e f g 2 h i j k l m n o p q r s t u v w x y z
全部读入数组的方法(比较简单而且很多人都会就不介绍了)有其局限性,因为perl占用的内存空间是字符实际空间的10倍以上。所以读一行写一行是节约内存最有效的方法,所以用Coro::Channel写了个,合并后3M的文本用不了几秒钟感觉速度还可以:
  1. #!/usr/bin/perl
  2. use Coro;
  3. use Coro::Channel;

  4. my $read_fh1 = new Coro::Channel;
  5. my $read_fh2 = new Coro::Channel;
  6. my $result = new Coro::Channel;

  7. async {
  8.     while () {
  9.         my @str = ($read_fh1->get ,$read_fh2->get);
  10.         chomp(@str);
  11.         my $str_line=join(" ",@str);
  12.         $result->put($str_line);
  13.     }
  14. };

  15. open my $FH1, ";
  16. open my $FH2, ";
  17. open my $FH, ">>D:/tem/file.txt";
  18. while ( my $fh1_line = <$FH1> ) {
  19.     $read_fh1->put($fh1_line);
  20.     my $fh2_line = readline($FH2);
  21.     $read_fh2->put($fh2_line);
  22.     my $fh_line = $result->get;
  23.     print $FH "$fh_line\n";
  24. }
  25. close $FH1;
  26. close $FH2;
  27. close $FH;
生成测试用文本file1、file2代码:
  1. #!/usr/bin/perl

  2. #file1(a..g),file2改(h..z)
  3. my $str=join(" ", (a..g));
  4. open my $fh,">>file.txt";
  5. foreach (1..50000){
  6. print $fh "$_ $str\n";
  7. }
  8. close $fh;
最近懒写blog,所以都从QQ空间转文章过来
阅读(1742) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~