7

私は、数十個の csv ファイルからの情報を統合する C++ コードに取り組んでいます。それらにはすべて、抽出したいタイムスタンプ付きのレコード データが含まれていますが、表現はファイルごとに多少異なります。表現の違いは、列の順序と列名の違いだけではありません。たとえば、1 つのファイルで複数の列を持つ 1 つの行が、別のファイルでは複数の行である場合があります。

そのため、すべてのファイルから必要な情報を含む統一されたデータ構造をまとめるために、各ファイルのカスタム処理が必要です。私の質問は、複雑さを管理しやすくし、コードをエレガントに保つために推奨されるコード パターンがあるかどうかです。または、良いケース スタディがあれば、この種の複雑さが過去にどのように処理されたかを調べる必要があります。

(このようなことは、perl のようなスクリプト言語の方が簡単かもしれませんが、プロジェクトは今のところ C++ です。また、私の質問は、これを処理するためのコード パターンがあるかどうかに関するものです。したがって、答えは必ずしも必要ではありません。言語固有になりすぎます。)

4

2 に答える 2

3

あなたが質問で使用するいくつかのフレーズが私に突き出ています: custom handling for each file, representation is somewhat different, complexity manageable. csv ファイルの形式に基づいてさまざまなバリエーションの解析アルゴリズムを使用する必要があり、(私が知る限り) 解析メカニズムを疎結合したいという事実に基づいて、戦略パターンをお勧めします。

戦略パターンは、CSV ファイルに含まれるデータのユーザーから解析メカニズムを分離します。データのユーザーは、CSV ファイルの形式には関心がなく、そのファイル内の情報のみに関心があるため、戦略パターンは優れた選択肢となります。解析メカニズムに類似点がある場合は、テンプレートパターンと戦略パターンの両方を一緒に使用して、重複を減らし、継承を利用できます。

戦略パターンを使用することで、戦略の作成をファクトリ メソッドまたは抽象ファクトリに抽出して、さらにクライアントを解析メソッドから切り離すことができます。

于 2013-03-20T12:42:05.723 に答える
0

さまざまなファイルで何をしたいのかよくわかりません。それらをデータベーステーブルのように使用することが考えられ、複数のファイルに散在する情報が添付されたキーがいくつかある場合は、最初に各ファイルから情報の一部を構築し、それらを集約するMapReduceのようなものを見たいと思うかもしれません。 2 番目のステップで同じキーを共有する情報。

データ構造に関しては、ファイルのレイアウトによって異なります。おそらく、ファイル内の情報を表す専用のデータ構造に情報を格納する、ファイルの種類ごとに専用のリーダーを用意するでしょう。各情報にキーを添付し、reduce 操作を使用して、同じキーを使用してすべての情報フラグメントをマージし、それらをプロキシ構造に集約できます。

一方、異なるシリアライゼーション方法から同一のオブジェクトを構築すること (つまり、異なるファイルは独立しているが、異なるレイアウトで同じタイプのデータを表す) である場合、どのシリアライゼーション方法が採用されているかを事前に知る必要はありません。残されている唯一の解決策は、デシリアライゼーションを力ずくで行うことです。入力タイプごとに 1 つずつリーダーのセットを作成し、ファイルの解析を試みます。失敗した場合は次のリーダーが開始され、新しいファイル形式が見つかるか、適切なリーダーが見つかるまで続きます。これをカバーするパターンはないと思います。

于 2013-03-20T12:17:49.710 に答える