如何在Perl中同时浏览两个文件?

前端之家收集整理的这篇文章主要介绍了如何在Perl中同时浏览两个文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个文本文件,包含各种位置值的列数据,按位置排序.

以下是第一个文件(文件A)的示例:

  1. 100 1
  2. 101 1
  3. 102 0
  4. 103 2
  5. 104 1
  6. ...

以下是第二个文件(B)的示例:

  1. 20 0
  2. 21 0
  3. ...
  4. 100 2
  5. 101 1
  6. 192 3
  7. 193 1
  8. ...

而不是将两个文件中的一个读入哈希表,这是由于内存限制而禁止的,我想要做的是以逐步的方式同时遍历两个文件.

这意味着我想通过A或B的线流并比较位置值.

如果两个位置相等,则我对与该位置相关的值进行计算.

否则,如果位置不相等,我会移动文件A或文件B的行,直到位置相等(当我再次执行计算时)或我达到两个文件的EOF.

在Perl中有没有办法做到这一点?

解决方法

看起来像是一个可能偶然发现的问题,例如具有键和值的数据库表数据.这是rjp提供的伪代码的实现.
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. sub read_file_line {
  7. my $fh = shift;
  8.  
  9. if ($fh and my $line = <$fh>) {
  10. chomp $line;
  11. return [ split(/\t/,$line) ];
  12. }
  13. return;
  14. }
  15.  
  16. sub compute {
  17. # do something with the 2 values
  18. }
  19.  
  20. open(my $f1,"file1");
  21. open(my $f2,"file2");
  22.  
  23. my $pair1 = read_file_line($f1);
  24. my $pair2 = read_file_line($f2);
  25.  
  26. while ($pair1 and $pair2) {
  27. if ($pair1->[0] < $pair2->[0]) {
  28. $pair1 = read_file_line($f1);
  29. } elsif ($pair2->[0] < $pair1->[0]) {
  30. $pair2 = read_file_line($f2);
  31. } else {
  32. compute($pair1->[1],$pair2->[1]);
  33. $pair1 = read_file_line($f1);
  34. $pair2 = read_file_line($f2);
  35. }
  36. }
  37.  
  38. close($f1);
  39. close($f2);

希望这可以帮助!

猜你在找的Perl相关文章