4

pyparsingこのテキストを構文ツリーに解析するルールを定義しました...

テキストコマンド:

add Iteration name = "Cisco 10M/half"
    append Observation name = "packet loss 1"
        assign Observation results_text = 0.0
        assign Observation results_bool = True
        append DataPoint
            assign DataPoint metric = txpackets
            assign DataPoint units = packets
        append DataPoint
            assign DataPoint metric = txpackets
            assign DataPoint units = packets
    append Observation name = "packet loss 2"
        append DataPoint
            assign DataPoint metric = txpackets
            assign DataPoint units = packets
        append DataPoint
            assign DataPoint metric = txpackets
            assign DataPoint units = packets

構文ツリー:

['add', 'Iteration', ['name', 'Cisco 10M/half']]
['append', 'Observation', ['name', 'packet loss 1']]
['assign', 'Observation', ['results_text', '0.0']]
['assign', 'Observation', ['results_bool', 'True']]
['append', 'DataPoint']
['assign', 'DataPoint', ['metric', 'txpackets']]
['assign', 'DataPoint', ['units', 'packets']]
...

上記の構文ツリーのネストされたすべてのキーと値のペアをオブジェクトのリンクリストに関連付けようとしています...階層は次のようになります(各単語はnamedtuple...階層内の子は両親の子供のリスト):

Log: [ 
    Iteration: [ 
        Observation: 
            [DataPoint, DataPoint], 
        Observation: 
            [DataPoint, DataPoint]
    ]
]

これらすべての目標は、ネットワーク機器に対するテストの流れを促進し、結果を記録するための汎用テスト データ取得プラットフォームを構築することです。データがこの形式になると、同じデータ構造を使用してテスト レポートが作成されます。以下のコメントの質問に答えるために、リンクされたリストを選択しました。これは、レポートを作成するときに情報を順番にデキューする最も簡単な方法と思われるためです。ただし、テストを完了する前に番号を割り当てIterationたり、Observationシーケンス番号を付けたりすることは避けたいと思います...テストの実施中に問題が見つかり、さらに観測を挿入する場合に備えて。私の理論では、リスト内の各要素の位置は十分ですが、それが問題の一部である場合は喜んで変更します。

問題は、作成後にリンク リスト内のオブジェクトに Key-Value を割り当てようとして迷ってしまうことです。たとえばObservation namedtuple、最初の に を挿入した後、上記の例Iterationの の更新を確実に処理するのに問題があります。assign Observation results_bool = True

この状況を処理するための一般化された設計パターンはありますか? 私はこれをしばらくグーグルで検索しましたが、テキストの解析 (私ができること) とデータ階層の管理 (主な問題) の間のリンクを作成できないようです。ハイパーリンクや小さなデモ コードは問題ありません。適切な軌道に乗るためのポインタが必要なだけです。

4

2 に答える 2

1

私はあなたが探しているものの実際のデザインパターンを認識していませんが、私は目の前の問題に大きな情熱を持っています. 私はネットワーク デバイスを頻繁に使用しており、データの解析と整理は、私にとって進行中の大きな課題です。

問題がデータの解析ではなく、その後の処理であることは明らかです。ここで、解析したデータに付加する意味について考える必要があります。リストを含むオブジェクトも意味がある場合は、ネストされたリストの方法がうまく機能する可能性があります。

名前付きタプルは、クラスのような素早い動作には最適ですが、基本的な属性アクセス以外のことを行う必要がある場合、特にタプルとして不変であることを考えると、うまくいきません。namedtuple特定のオブジェクトを本格的なクラスに置き換えたいと思うでしょう。このようにして、使用可能な動作とメソッドを高度にカスタマイズできます。

たとえば、 にIterationは常に 1 つ以上のObservationオブジェクトが含まれ、その後 1 つ以上のオブジェクトが含まれることがわかりDataPointます。関係を正確に説明できれば、それらを処理する道が開けます。

于 2011-04-12T01:00:09.437 に答える
1

私は最終的にtextfsmを使用しました。これにより、構成ファイルの解析中に異なる行間で状態を維持できます。

于 2011-04-28T11:47:47.613 に答える