我正在尝试使用Perl脚本使用两个独立的while循环读取两个单独的文件。我使用面向对象的方式来读取文件(Module IO :: File)。读取file1的第一个while循环工作正常,但读取file2的第二个while循环没有读取任何内容。我的代码如下,
try( RevWalk walk = new RevWalk( repository ) ) {
RevCommit commit = walk.parseCommit( master.getObjectId() );
}
我在第二个while循环中写了几个print语句,看它们是否正在执行。我发现打印语句没有执行,这意味着程序没有进入第二个while循环。这意味着第二个while循环的getline()语句可能有问题,但我不知道如何解决这个问题。任何帮助,将不胜感激。 编辑:为简洁起见,我在代码中省略了一些变量声明。
Edit2:这是我正在做的最小例子。
#!/usr/bin/perl
use 5.18.0;
use warnings;
use IO::File;
$file1="file1.dat";
$file2="file2.dat";
my $f1 = IO::File -> new("< $file1") or die "Cannot read file1: $!";
my $f2 = IO::File -> new("< $file2") or die "Cannot read file2: $!";
while ( $linef1 = $f1 -> getline() ){
data extraction from file 1
}
$f1 -> close;
while ( $linef2 = $f2 -> getline() ){
data extraction from file 2
}
此代码运行时没有任何错误,并给了我以下输出。
#!/usr/bin/perl
use 5.18.0;
use warnings;
use IO::File;
my $output_filename = $ARGV[0];
my $file = substr($output_filename,0,-4);
my $line;
my $linef;
my $foo = 0;
my $bar = 0;
my $fchk_filename = "hcho_fr.fchk";
my $fout = IO::File -> new("< $output_filename") or die "Cannot read log file: $!";
my $ffchk = IO::File -> new("< $fchk_filename") or die "Cannot read fchk file: $!";
while ( $line = $fout -> getline() ){
if ($line =~ /Initial\sParameters/){
$foo++;
print("Still in the first while loop.\n");
}
}
print("First while loop completed.\n");
$fout -> close;
while ( $linef = $ffchk -> getline() ){
print("Entered the second while loop.\n");
if ( $linef =~ /Cartesian Gradient/ ){
$bar++;
print("Still in the second while loop.\n");
}
}
print("Successfully executed.\n");
答案 0 :(得分:-1)
以下是一些想法:
最有可能的是 - 第二个文件是否以空行开头?您是否有可能获得空虚但真实的价值?或许最好检查一下
while ( defined($linef = $ffchk -> getline()) ){
print("Entered the second while loop.\n");
if ( $linef =~ /Cartesian Gradient/ ){
$bar++;
print("Still in the second while loop.\n");
}
}
只是为了确保您获得定义的值而不是可能为空的值。
如果您阅读其他文件会怎样?或者与第一个循环相同的文件?确保它不是简单的东西,比如缺少换行符。
最后,您是否尝试过添加&#34; $ | = 1&#34;你的代码,以确保输出没有被缓冲到某个地方?这是一个很长的镜头,但有时输出可能看起来没有被显示,因为它在缓冲区中等待在它出现之前被冲洗。我怀疑这是否发生在这里,但这是一个绝对肯定的好方法。
这些只是基于你描述的内容的一些随机想法。