2011-08-11 14 views
2

場合によっては配列フィールドを含む固定長テキストベースのメッセージを解析(および構築)する必要があります。
例:これはオブジェクトだったら固定長フィールドの可変長配列によるメッセージの解析

PARTA LOTA 02SUBLOT1 SUBLOT2 03TEST1結果1 TEST2結果2 TEST3 RESULT3

、それは以下のロットオブジェクトを使用する場合があります。
品番(PARTA)
ロット番号(LOTA)
2つのサブロットオブジェクト(数量999と数量150とSUBLOT2とSUBLOT1)
3つの試験結果(結果1234.67890とTEST1の配列の配列、... )
メッセージに配列項目の数が指定されていることに注意してください。

私は人々が見ているFileHelpersライブラリを使用したいと考えていましたが、量を指定する別のフィールドがある複数の配列フィールドをサポートするようには見えません。自身が[FixedLengthRecord()]の属性を持っています。

これは私がやりたいことです。フィールド長10は、これを単純に保つためのアーティファクトに過ぎないことに注意してください。すべてのフィールドが通常同じ長さで定義されるわけではありません。

[FixedLengthRecord()] 
public class Lot 
{ 
    [FieldFixedLength(10)] 
    public string PartNumber { get; set; } 
    [FieldFixedLength(10)] 
    public string LotNumber { get; set; } 
    [FieldFixedLength(10)] 
    public SubLot[] SubLots { get; set; } 
    [FieldFixedLength(10)] 
    public Test[] Tests { get; set; } 
} 

[FixedLengthRecord()] 
public class SubLot 
{ 
    [FieldFixedLength(10)] 
    public string SubLotNumber { get; set; } 
    [FieldFixedLength(10)] 
    public int Quantity { get; set; } 
} 

[FixedLengthRecord()] 
public class Test 
{ 
    [FieldFixedLength(10)] 
    public string Description { get; set; } 
    [FieldFixedLength(10)] 
    public double Result { get; set; } 
} 

これはFileHelpersで可能ですか?他のアイデア?私は多くの異なるメッセージタイプを持っていますので、それぞれを手動でコード化するのではないでしょう。 FileHelpersの属性デコレーションメソッドはすばらしいクリーンソリューションのように思えますが、私はそれを拡張することを検討していますが、そこではより良い解決策を見逃さないようにしたいと考えています。

+0

質問タイトルの「固定長」を使用するのは間違いでした。可変長の配列要素を含む固定長文字列を作成するのはかなり難しいです。 .NET TextFieldParserクラスは、これらの種類のファイルを解析する優れたソリューションです。 –

+0

あなたは*** FileHelpers ***を使って解決策を得ましたか? – Kiquenet

答えて

1

私は過去に非常に似たようなことをしたと思います。

この問題に取り組む方法は、カスタム属性を使用することです。これにより、仕様に記述されているとおりにデータを正確に記述したクラスとネストされたオブジェクトを作成し、カスタム属性を使用してデータ属性(長さ、タイプ、パディング要件、必要な場合など)

また、クラスと属性のカスタムシリアル化/デシリアライズは、データが固定サイズのチャンクまたはパケットでデータを送受信するカスタム政府プロトコルを経由していたため、実際のアプリケーションに固有のものでした継続コードなどとの暗号化されたソケット上

チュートリアル

関連する問題