gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:59:49 32 4
gpt4 key购买 nike

我有两个文本文件,其中包含各种 position 的柱状数据- value ,按 position 排序.

这是第一个文件(文件 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并比较 position值。

如果两个位置相等,那么我对与该位置关联的值执行计算。

否则,如果位置不相等,我将遍历文件 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);

希望这可以帮助!

关于perl - 如何在 Perl 中同时浏览两个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2498937/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com