首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl While语句

Perl While语句
EN

Stack Overflow用户
提问于 2012-06-07 04:45:39
回答 3查看 203关注 0票数 0

好了,这是我今天的最后一个问题:我正在尝试让我的程序搜索整个文档。如果文档中有单词“不成功”,那么程序将搜索单词" error“并记录错误的所有实例。然而,我很难让这两个人相互依赖。请帮帮我!我是Perl的新手(这只是我使用它的第二天),所以你能提供的细节/评论越多越好!这是我当前的代码,我知道它现在不能运行:

代码语言:javascript
复制
#!/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" ;
    }

}
}
}
}

关闭文件;关闭日志文件;

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-07 06:06:06

在一个循环中检查“不成功”和“错误”,如果发现“不成功”,则在最后打印错误结果...

代码语言:javascript
复制
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适用于不区分大小写的搜索,因此如果不需要,请从上面的代码中删除它。

票数 1
EN

Stack Overflow用户

发布于 2012-06-07 04:54:48

使用

代码语言:javascript
复制
<LOGFILE>

很多次可能不是你想要的。更直接的麻烦原因可能是一个错误的"{“。

看起来你希望“错误”总是比“不成功”晚出现,对吧?

试一试

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2012-06-07 05:00:17

您在第1步之前执行第5步是一个严重的错误。您在代码中没有使用strictwarning杂注。实际上,您发布的代码不能编译。

对于所讨论的问题,如果您希望每个文件只解析一次(一个好的程序员应该努力做到这一点),您应该在两种模式下进行解析:(1)检测到unsuccessful的模式和尚未检测到它的模式。前者将负责输出行,而后者则不会。

现在,我建议回到一些基础知识,而不是提前采取步骤。在过去,我自己在步骤1之前执行了很多次步骤5,每次都是错误的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10922000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档