0

さて、これが私の最後の質問です (その日の質問です): 私は自分のプログラムに文書を検索させようとしています。ドキュメントのどこかに「失敗」という単語が含まれている場合、プログラムは「エラー」という単語を検索し、エラーのすべてのインスタンスを記録します。ただし、2つを相互に依存させるのに苦労しています。助けてください!私は Perl に非常に慣れていません (これは Perl を使用して 2 日目です) ので、提供できる詳細/コメントが多いほど良いです! これが私の現在のコードです。現在は実行されないことを認識しています。

#!/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" ;
    }

}
}
}
}

ファイルを閉じます。LOGFILE を閉じます。

4

3 に答える 3

1

1 つのループで「失敗」と「エラー」をチェックし、最後に「失敗」が見つかった場合はエラー結果を出力します...

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-06T22:06:06.320 に答える
0

ステップ 1 の前にステップ 5 を実行することは、重大な間違いを犯しています。コードでプラグマstrictとプラグマを使用していません。warning実際、投稿したコードはコンパイルされません。

問題の問題に関しては、各ファイルを 1 回だけ解析したい場合 (優れたプログラマーが行うように)、2 つのモードで解析する必要があります: (1)unsuccessfulが検出されたモードと、それが検出されたモードまだ検出されていません。前者は行を出力しますが、後者は出力しません。

ここで、いくつかの基本に戻り、事前に対策を講じないことをお勧めします。私は過去に何度もステップ 1 の前にステップ 5 を実行しましたが、毎回間違いでした。

于 2012-06-06T21:00:16.993 に答える