好了,这是我今天的最后一个问题:我正在尝试让我的程序搜索整个文档。如果文档中有单词“不成功”,那么程序将搜索单词" error“并记录错误的所有实例。然而,我很难让这两个人相互依赖。请帮帮我!我是Perl的新手(这只是我使用它的第二天),所以你能提供的细节/评论越多越好!这是我当前的代码,我知道它现在不能运行:
#!/usr/local/bin/perl
my $argument1 = $ARGV[0];
my $argument2 = $ARGV[1];
open (LOGFILE, "<$argument1") or die "Can't find file";
open FILE, ">>$argument2" or die $!;
while (<LOGFILE>){
if {(/Unsuccessful/){
while(<LOGFILE>){
if (/Error/){
print FILE "ERROR in line $.\n" ;
}
}
}
}
}关闭文件;关闭日志文件;
发布于 2012-06-07 06:06:06
在一个循环中检查“不成功”和“错误”,如果发现“不成功”,则在最后打印错误结果...
my $argument1 = $ARGV[0];
my $argument2 = $ARGV[1];
open (LOGFILE, "<$argument1") or die "Can't find file";
open (FILE, ">>$argument2") or die $!;
my $unsuccessful = 0;
my @errors = ();
while (<LOGFILE>) {
if (/Unsuccessful/i) {
$unsuccessful = 1;
}
if (/Error/i) {
push(@errors, "ERROR in line $.\n");
}
}
if ($unsuccessful) {
print $_ for @errors;
}Switch /i适用于不区分大小写的搜索,因此如果不需要,请从上面的代码中删除它。
发布于 2012-06-07 04:54:48
使用
<LOGFILE>很多次可能不是你想要的。更直接的麻烦原因可能是一个错误的"{“。
看起来你希望“错误”总是比“不成功”晚出现,对吧?
试一试
my $argument1 = $ARGV[0];
my $argument2 = $ARGV[1];
open (LOGFILE, "<$argument1") or die "Can't find file";
open FILE, ">>$argument2" or die $!;
my $unsuccessful = 0;
while (<LOGFILE>){
if ($unsuccessful) {
if (/Error/) { print FILE "ERROR in line $.\n"; }
}
else {
if (/Unsuccessful/) { $unsuccessful = 1; }
}
}
close FILE;
close LOGFILE;发布于 2012-06-07 05:00:17
您在第1步之前执行第5步是一个严重的错误。您在代码中没有使用strict和warning杂注。实际上,您发布的代码不能编译。
对于所讨论的问题,如果您希望每个文件只解析一次(一个好的程序员应该努力做到这一点),您应该在两种模式下进行解析:(1)检测到unsuccessful的模式和尚未检测到它的模式。前者将负责输出行,而后者则不会。
现在,我建议回到一些基础知识,而不是提前采取步骤。在过去,我自己在步骤1之前执行了很多次步骤5,每次都是错误的。
https://stackoverflow.com/questions/10922000
复制相似问题