1

私の仕事では、バイナリ プロトコルのログ ファイルを処理しなければならないことがあります (ログ ファイルには、メッセージの 16 進ダンプが含まれています)。バイナリ データを解釈して、より使いやすい形式で内容を出力できる Perl スクリプトを作成したいと考えています。

独自の形式でプロトコルメッセージの(機械可読)説明があり、その形式を解析する方法を(ほとんど)理解しました(完全に理解できない部分は私の目標とは関係がないため、無視できますそれら)、スクリプトで使用するために、説明をデータ構造に変換できます。

プロトコルの説明はめったに変更されないため、ログファイルを分析するたびにプロトコルの説明を再解析するのは無駄に思えます。説明の再解析をスクリプトで自動的にトリガーしたいと考えています。
これを実現する最善の方法は何ですか?

4

2 に答える 2

1

プロトコル記述がスクリプトにアクセス可能なファイルにあると仮定すると、解析結果を中間ファイルにキャッシュする解析データを読み込む機能があります。ロジックは非常に単純ですが、完全な仕様を書き出そうとしたため、手順は非常に冗長に見えます。実際には、10 行未満の Perl コードが必要です。

  1. 中間ファイルが存在するかどうかを確認します。そうでない (または読み取ることができない) 場合は、独自の解析手順 (#4) にスキップします。

  2. 中間キャッシュ ファイルを読み込める場合は、「プロトコルの説明のタイムスタンプ」フィールド (後述) を読み込んでください。次に、「プロトコル記述」ファイルの変更時刻を調べてstat()比較します。「プロトコル記述」ファイルの変更時刻が >= キャッシュ ファイルに保存されているタイムスタンプである場合は、独自の解析手順 (#4) にスキップします。

  3. それ以外の場合 (たとえば、「プロトコル記述」ファイルの時刻が < キャッシュ ファイルに保存されているタイムスタンプ) の場合、Data::Dumper または Storable を介して中間キャッシュ ファイル データを読み取ります。終わり。

  4. #1 または #2 のロジックのために再解析する必要がある場合は、「プロトコル記述」ファイルを読み込んで、データ構造に解析します。

  5. 次に、「protocol_description_timestamp」(値は呼び出しから派生したプロトコル記述ファイルの変更時刻stat) と 2 番目のキー「data」の 2 つのキーでハッシュを作成します。値は、結果として作成したばかりのデータ構造への参照です。解析の。

  6. 次に、Perl データ構造を格納するために選択した 、またはその他の方法をStorable使用して、そのデータ構造を中間キャッシュ ファイルに保存します。Data::Dumper

于 2010-10-28T20:25:30.207 に答える
0

これには Makefile を使用できます。使用するデータ構造を、プロトコルの記述に依存する Makefile ターゲットにします。Make は、プロトコルがスクリプトよりも最近更新されたことに気付くと、指定したコマンドを実行してデータを再作成します。

于 2010-10-28T18:18:55.653 に答える