- 締切済み
ログの解析プログラム
perlにてログの解析プログラムを作成しております。 ログは各データの区切り文字がスペースで出力されます。 その為、例えば文字列で「プログラムの異常が発生しました (発生ノード)」が出力されている場合split関数によって配列に格納しようとすると「プログラムの異常が発生しました」と「(発生ノード)」に分解されて格納されてしまい後ほどの処理に影響が出てしまいます。ログの仕様として文字列を出力するときには直前に文字列の長さを提示しております。例えば「43 プログラムの異常が発生しました (発生ノード)」のような形で出力されます。これらの条件で文字列を一つの配列に格納するにはどのようなプログラムを組めばよろしいでしょうか。 現時点で考えているのは文字列の長さが出ているのでその回数分文字を1文字づつ読み込むことを考えております。ただし全角と半角の区別が自動でついてしまうと厄介なので全部半角として取り込めないかなどを検討しております。 なにか他にいいアイデアがありましたら教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- duckling
- ベストアンサー率47% (88/185)
回答No.2
一般的に、スプリットさせる区切り文字には、 <> を使います。 callhiro さんが言われるように、 スプリットの区切りを変えた方が早いと思いますよ。
- callhiro
- ベストアンサー率35% (54/152)
回答No.1
区切り文字をスペースじゃなくしたほうがいいんじゃないですか?
質問者
お礼
区切り文字が<>等で出てくれると助かるのですが別のアプリケーションがだしているログをperlで解析しようとしているので四苦八苦しています。例えばsyslogのメッセージの統計を取ろうとした時に単純にスペースを区切り文字にできないですよね。
お礼
substr関数を使うとうまくいきました。 実際のプログラムは以下のようにしました。 @log_split = split(/ /,$logdata,2); $logdata[0] = substr($log_split[1],0,$log_split[0]); $logdata[1] = substr($his_002[1],$his_002[0]); print "メッセージ内容<BR>\n"; print "<FONT COLOR=\"$font_color\">$logdata[0]</FONT><BR>"; print "<BR>\n"; これで残りのデータは$logdata[1]に入るので活用できます。