以前に尋ねた質問のフォローアップとして、2つのファイルからデータを読み取り、1つのファイルを1行ずつ解析して、他のファイルの各行に含まれる文字列と一致するようにしようとしています。1つ目はログファイルで、2つ目はキーファイルと呼びます。foreachループを使用してキーファイルを反復処理し、その中に埋め込みます。これは、ログの各行をステップスルーするwhileループです。パターンマッチングを使用して特定の文字列を識別しようとしていますが、この文字列は2つのプラス記号(つまり+ name +)またはプラスとアスタリスク(つまり+ name *)で囲まれています。残念ながら、パターンマッチングを機能させることができませんでした。パターン検索コードセグメントの本文を以下に含めました。
foreach $element (@fr_array) {
open (LOGFILE, "<", $logname) or die $!;
while (<LOGFILE>) { #While reading one line at a time from the log....
chomp;
$log_string = <LOGFILE>;
if ($log_string =~ /\+$element\+/) {
$fr_count++;
print "Counter increment since $log_string is the same as $element.";
$log_match++;
}
}
編集
フィードバックをありがとう、みんな...私が呼び出したコマンドのいくつかは、私がプログラムをたどって問題を見つけるのを助けるために使用されました....私はいくつかのアドバイスを受け、もう少し調査した後、使用しようとしています代わりにgrepコマンドを使用しますが、パターンマッチングはまだ正しく機能していないようです。検索文字列として何を使用しても、trueとして解決されているようです。私は一日中コードを調べてきましたが、ここからどこに行くべきかよくわかりません。正規表現で失敗した後、使用する別の検索文字列を使用することにしました。これは、いくつかの等号を除くすべてのリテラルで構成されています。さて、明確にするために、私はマッチが見つかったら何もすることに興味がありません。マッチがいくつあるかを追跡する必要があるので、カウンターを使用します。とにかく、私は今いる場所の更新されたコードセグメントを含めています。ループが正しく機能していることを確認しました。問題はパターンマッチングだけです。私は今結果を得ています、しかし数は正確ではありません....私のテストログは1か2だけを返すはずです、しかしそれは私に204を吐き出します。
open (LOGFILE, "<", $logname) or die $!;
while($log_string = <LOGFILE>) {
chomp $log_string;
foreach $element (@fr_array) {
$fr_count++ if (grep {"Action=123 Cls=AM"} $log_string)
皆様のご支援と忍耐に改めて感謝いたします。:)