<分区>
问题:
我需要搜索一个巨大的文本文件(包含大约 150 万行数据),提取与唯一 ID 匹配的那些行。我已将我的唯一 ID 存储在一个数组中,并为每个数组元素遍历整个文件一次。
虽然此方法适用于小型数组,但如果数组非常大,它会大大降低我的程序速度,因为有太多操作要做。
我的数组最多可以包含 10,000 个以下形式的唯一标识符:
DC888U1
DC888U2
DC888U3
...
...
我的数据文件中的行将始终以唯一标识符开头。
DC888U1 Apples 0.99 75
DC888U2 Oranges 0.75 1002
DC888U3 Bread 1.35 100
... ... ... ...
... ... ... ...
我的代码如下:
#array containing identifiers
open (IDENTIFIERS "< keywords.txt") or die "Cannot open file: $!";
chomp(my @keywords = <IDENTIFIERS>);
close (IDENTIFIERS);
#iterate through the array element by element
foreach my $element (@keywords) {
open (FH "< inventory.txt") or die "cannot open file: $!";
while (<FH>) {
if ($_ =~ /^\Q$element\E/) {
print $_;
}
}
close (FH);
}
我查看了 Tie::File 以查看它是否可以加快我的处理速度,但没有成功。我想知道有没有一种方法可以缓存已经打印的行,这样当我下次通过文件时,每次要搜索的数据量都会减少。
有吗?