database.Win.txt是一个包含3行多个的文件。每三行中的第二行是一个数字。代码应该打印出一行由制表符分隔的三行(按新顺序),但仅限于第二行是1.
通过这段代码,我是否真的得到循环来创建一个包含三行database.Win.txt的数组,每次它都在循环中运行?这是我的目标,但我怀疑这不是代码所做的,因为我得到一个错误,说int()函数需要一个数值,但没有找到一个。
while(<database.Win.txt>){
$new_entry[0] = <database.Win.txt>;
$new_entry[1] = <database.Win.txt>;
$new_entry[2] = <database.Win.txt>;
if(int($new_entry[1]) == 1) {
chomp($new_entry);
print "$new_entry[1], \t $new_entry[2], \t $new_entry[0], \n"
}
}
我是Perl的初学者。请尽可能简单解释!
答案 0 :(得分:0)
我认为你在解决方案上有一个良好的开端。但是,您的while
会在读取下三行之前读取一行(如果这些是<$file_handles>
)。 int
不是必需的,chomp
是 - 在检查$new_entry[1]
的值之前,最后还有一个记录分隔符。
鉴于此,请考虑以下事项:
use strict;
use warnings;
my @entries;
open my $fh, '<', 'database.Win.txt' or die $!;
while (1) {
last if eof $fh;
chomp( $entries[$_] = <$fh> ) for 0 .. 2;
if ( $entries[1] == 1 ) {
print +( join "\t", @entries ), "\n";
}
}
close $fh;
始终以use strict; use warnings
开头。接下来,使用open
的{{3}}打开文件。这里使用while (1)
,因此可以在while
循环内一次读取三行。由于它是一个'无限'while
循环,last if eof $fh;
提供了一条出路,即,如果下一个文件读取产生文件结尾,那就是last
。正下方是一个for
循环,它可以有效地完成您的操作:将文件行分配给数组位置。请注意,chomp
用于在分配期间删除记录分隔符。最后一部分也与你的相似,因为它检查三行中的第二行是否为1,然后如果是则打印该行。
希望这有帮助!