perl - 使用 perl 将 2 个文件“合并”到第三个文件中

标签 perl file-io

我正在审查一个测试,我似乎无法让这个例子正确编码。

问题:编写一个名为 ileaf 的 perl 脚本,它会将一个文件的行与另一个文件的行进行 linterleave,将结果写入第三个文件。如果文件的长度不同,则将多余的行写在末尾。

示例调用:
ileaf 文件 1 文件 2 输出文件


这就是我所拥有的:

#!/usr/bin/perl -w

open(file1, "$ARGV[0]");
open(file2, "$ARGV[1]");
open(file3, ">$ARGV[2]");

while(($line1 = <file1>)||($line2 = <file2>)){
    if($line1){
            print $line1;
    }

    if($line2){
            print $line2;
    }
}

这会将信息发送到屏幕,以便我可以立即看到结果。最终版本应该“打印 file3 $line1;”我得到所有的 file1 然后所有的 file2 w/out 和行的交错。

如果我理解正确的话,这是一个使用“||”的函数在我的 while 循环中。 while 检查第一次比较,如果为真则进入循环。这只会检查file1。一旦 file1 为假,while 检查 file2 并再次进入循环。

我能做些什么来交错线?

最佳答案

你没有从 while(($line1 = <file1>)||($line2 = <file2>)){ 得到你想要的东西,因为只要 ($line1 = <file1>) 为真,($line2 = <file2>) 就永远不会发生。

试试这样的:

open my $file1, "<", $ARGV[0] or die;
open my $file2, "<", $ARGV[1] or die;
open my $file3, ">", $ARGV[2] or die;

while (my $f1 = readline ($file1)) {
  print $file3 $f1;  #line from file1

  if (my $f2 = readline ($file2)) {  #if there are any lines left in file2
    print $file3 $f2;
  }
}

while (my $f2 = readline ($file2)) {   #if there are any lines left in file2
  print $file3 $f2;
}

close $file1;
close $file2;
close $file3;

关于perl - 使用 perl 将 2 个文件“合并”到第三个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13867324/

相关文章:

perl - 为什么一个模块可以自行编译,但在其他地方使用时会失败?

perl - $x->{a}{b} 和 $x->{a}->{b} 的区别

perl - -> 运算符在 Perl 中有什么作用?

c# - 使用 "Open with"时如何允许我的程序打开文件?

c - 为什么这段代码给出了错误的文件描述符

perl - 我如何告诉 Module::Build 不要将 lib/perl5 子目录添加到安装路径?

python - 文件内容是否完全存在于库文件中

java - 用户编写的程序如何发送到图书馆?

file-io - 如何在verilog中逐行读取文本文件?

java - 在java中同时读取和写入同一个文件