加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:17:11 所属栏目:大数据 来源:网络整理
导读:我有两个文本文件,包含各种位置值的列数据,按位置排序. 以下是第一个文件(文件A)的示例: 100 1101 1102 0103 2104 1... 以下是第二个文件(B)的示例: 20 021 0...100 2101 1192 3193 1... 而不是将两个文件中的一个读入哈希表,这是由于内存限制而禁止的,我
我有两个文本文件,包含各种位置值的列数据,按位置排序.

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

100   1
101   1
102   0
103   2
104   1
...

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

20    0
21    0
...
100   2
101   1
192   3
193   1
...

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

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

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

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

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

解决方法

看起来像是一个可能偶然发现的问题,例如具有键和值的数据库表数据.这是rjp提供的伪代码的实现.
#!/usr/bin/perl

use strict;
use warnings;

sub read_file_line {
  my $fh = shift;

  if ($fh and my $line = <$fh>) {
    chomp $line;
    return [ split(/t/,$line) ];
  }
  return;
}

sub compute {
   # do something with the 2 values
}

open(my $f1,"file1");
open(my $f2,"file2");

my $pair1 = read_file_line($f1);
my $pair2 = read_file_line($f2);

while ($pair1 and $pair2) {
  if ($pair1->[0] < $pair2->[0]) {
    $pair1 = read_file_line($f1);
  } elsif ($pair2->[0] < $pair1->[0]) {
    $pair2 = read_file_line($f2);
  } else {
    compute($pair1->[1],$pair2->[1]);
    $pair1 = read_file_line($f1);
    $pair2 = read_file_line($f2);
  }
}

close($f1);
close($f2);

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读