我正在审查一个测试,我似乎无法得到这个例子来正确编码.
问题:编写一个名为ileaf的perl脚本,它将文件的行与另一个文件的行交织在一起,将结果写入第三个文件.如果文件的长度不同,则在末尾写入多余的行.
示例调用:ileaf file1 file2 outfile
这就是我所拥有的:
#!/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;
}
}
Run Code Online (Sandbox Code Playgroud)
这会将信息发送到屏幕,以便我可以立即看到结果.最后一节应该"打印file3 $ line1;" 我得到所有的file1然后所有的文件2 w/out和交错的行.
如果我理解正确,这是使用"||"的功能 在我的while循环中.while检查第一次比较,如果它是真的,则进入循环.这只会检查file1.一旦file1为false,则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;
Run Code Online (Sandbox Code Playgroud)