我必须说一个文件one.txt和two.txt。
one.txt具有以下数据-
Aerospike
two.txt具有以下数据-
ab
cd
ef
**我想在不同的文件中像这样输出
output.txt-
gh
ij
kl
有人可以帮忙吗?
我曾尝试一次打开两个文件,但不知为何我无法做到这一点。
答案 0 :(得分:1)
您只需要从备用文件中读取行即可。
例如:
open my $fh1, '<', $file1 or die "$0: $file1: $!\n";
open my $fh2, '<', $file2 or die "$0: $file2: $!\n";
while () {
defined(my $line1 = readline $fh1) or last;
defined(my $line2 = readline $fh2) or last;
print $line1, $line2;
}
或者,您可以在循环条件下进行读取,但看起来可能有点奇怪:
while (
defined(my $line1 = readline $fh1) &&
defined(my $line2 = readline $fh2)
) {
print $line1, $line2;
}
最短的文件用完后,它将立即停止。
如果您始终要处理所有行,则可以使用以下解决方案(将其推广到两个以上的文件):
my @fhs = ($fh1, $fh2);
while (@fhs) {
my $fh = shift @fhs;
defined(my $line = readline $fh) or next;
push @fhs, $fh;
print $line;
}
这将继续从@fhs
中的第一个文件句柄读取行,然后旋转数组(将第一个句柄移动到最后一个位置)。当文件句柄用完时,会将其从数组中删除。这一直持续到所有把手都用尽为止。
如果您希望它在第一个句柄用完后立即停止,请将next
更改为last
。