0

私は数日間 Perl を学んでいますが、まったくの初心者です。

コードは大きなファイルから読み取ることになっており、行に「警告」が含まれている場合は、それを保存して新しい行に出力し、各タイプの警告の出現回数もカウントする必要があります。ファイルには、「warning GR145」や「warning GT10」など、さまざまな種類の警告があります。

だから私は何かを印刷したい

Warning GR145 14 warnings
Warning GT10  12 warnings

等々

問題は、実行時に警告のリスト全体が出力されないことです。私はあなたの助けに感謝します。コードは次のとおりです。

use strict;
use warnings;

my @warnings;

open (my $file, '<', 'Warnings.txt') or die $!;

while (my $line = <$file>)  {
  if($line =~ /warning ([a-zA-Z0-9]*):/) {
    push (@warnings, $line);
    print $1 ,"\n";
  }
}

close $file;
4

2 に答える 2

1

ifステートメントで大文字と小文字を区別するマッチングを使用しています。を追加してみてください/i

if($line =~ /warning ([a-z0-9]*):/i)

編集:私は実際の質問を読み間違えたので、この答えは無視される可能性があります...

于 2012-11-19T12:33:41.603 に答える
0

警告文字列から発生回数へのマッピングであるハッシュ配列を使用する必要があります。

use strict;
use warnings;

my %warnings = {};

open (my $file, '<', 'Warnings.txt') or die $!;
while (my $line = <$file>)  {
    if ($line =~ /warning ([a-zA-Z0-9]*)\:.*/) {
        ++$warnings{$1};
    }
}
close $file;

foreach $w (keys %warnings) {
    print $w, ": ", $warnings{$w}, "\n";
} 
于 2012-11-19T12:47:26.737 に答える