2011-08-12 10 views
4

ここで問題はありますが、フィールドの長さと開始位置と停止位置に基づいて複雑な(強制された)構造のフラットな文字列ファイルを生成する必要があります。このファイルは.Netアプリケーション(SQL Serverに格納されたデータ)から生成されます。異なるテンプレートを持つ異なるヘッダを持っています。時間外に構造が変化する可能性もあります。同じ種類のファイルも私のシステムに戻さなければなりません。テンプレートからフラットファイルを生成して解析するにはどうすればいいですか?

ファイルの外観を定義するテンプレートを作成することをお勧めします。 名前、タイプ、フィールドの長さ、開始&終了位置、デフォルト値。

そして、ある種類のビューデータからファイルを生成し、同じテンプレートからそれを解析することができます。

私はこの種の問題を抱える最初の人ではないと確信していますが、インターネット上では良いライブラリを見つけることができません。私はStringTemplateを見てきましたが、データの長さと位置に基づいてテンプレートを作成できないようです。

ありがとうございます!

+0

このような市販のソフトウェアを見たことがありますか?http://www.altova.com/mapforce/flat-file-mapping.html(PS:私は決して関連していません) –

答えて

1

私はこれを扱う一般的なコンポーネントについて知らない。しかし、私はテンプレート定義に基づいてオブジェクトのプロパティを塗りつぶすためにリフレクションを使用する一般的なツールを書くだろう。

「テンプレート」は、既に説明したようにファイルの構造を定義する必要があります。データをロードするクラスの完全な名前(場合によってはクラスを含むアセンブリも変更可能です)。

基本的な流れは次のようになります正確ため

  • チェックヘッダ(オプション)
  • ループデータ線
    • がターゲットクラスの新しいインスタンスを作成しても((Assembly.GetType() and Type.GetConstructorを使用) ` )
    • フィールドをループする
      • 型に応じた解析値
      • は、結果コレクションにオブジェクトを追加します(Type.GetProperty()PropertyInfo.SetValue()を使用して)同じ名前のプロパティの値
    • を設定します。
  • はちょうどあなたのビューオブジェクトはデフォルトコンストラクタとすべての必要な性質を持っていることを確認し

を完了し、あなたは問題ないはずです。

リフレクションを使用してビューオブジェクトの値を取得するのと同じ方法でファイルを書き込むことができます。

+0

それは多かれ少なかれ私がやったことです。ありがとう。 – Gimly

1

XMLまたはJSONへの標準的なシリアル化を使用しないことをお勧めします。 T4 Templating EngineまたはStringTemplateが助けになるかどうかを確認してください。

編集:あなたのアプローチを再評価し、世代のためだけに見える固定された長さをサポートしていないので、「テンプレート化」を検索しないでください。カスタムフォーマットへのシリアライゼーションとデシリアライズが必要だと言うのは公正だろうか?フォーマットが独自のものであれば、固定長などのすべての規則を含むカスタムシリアル化コードを書く必要があります。

+0

はい、残念なことに正当な理由があります。古いシステムにデータをエクスポートすると、固定長のフラットファイルのみをインポートおよびエクスポートできます。私は既にStringTemplateを見てきましたが、固定長のテンプレートを使用することはできません。 T4は同じようです。 – Gimly

+0

まあ、それは特殊なフォーマットに間違っていますし、シリアル化によって行うこともできますが、私は異なるフォーマットのファイルを持っているので(固定長のフラットファイルはすべて)、フォーマットごとにシリアライズする必要があります。私は本当に選択肢がないと思う。 – Gimly

1

この問題はエンタープライズアプリケーションの世界ではよく起こります。あなた自身のライブラリを開発したり、仕事全体を作るswを選ぶことができます。この種のアプリケーションには多くの例がありますが、一般的にESB(Enterprise Service Bus)はデータ転送に役立ちます。ESBは、すべての種類のデータソース、固定長ファイルに対して多くのデータハンドルを提供します。

関連する問題