2

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

PARTA LOTA 02SUBLOT1 SUBLOT2 03TEST1 RESULT1 TEST2 RESULT2 TEST3 RESULT3

これがオブジェクトである場合、以下の Lot オブジェクトを使用する可能性があります。
部品番号 (PARTA)
ロット番号 (LOTA)
2 つのサブロット オブジェクトの配列 (数量 150 の SUBLOT1 と数量 999
の SUBLOT2) 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 の属性装飾メソッドは、非常にクリーンなソリューションのように思えます。私はそれを拡張することを検討していますが、より良いソリューションを見逃さないようにしたいと考えています。

4

1 に答える 1

1

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

私がこの問題に取り組んだ方法は、カスタム属性を使用することです。これにより、仕様に記載されているとおりにデータを記述したクラスとネストされたオブジェクトを作成し、カスタム属性を使用してデータ属性 (長さ、型、必要に応じてパディング要件など) を記述することができました。

クラスと属性のカスタムシリアライゼーション/デシリアライゼーションも作成しましたが、これは実際のアプリケーションに固有のものでした.継続コードなど

チュートリアル

于 2011-08-11T23:15:06.727 に答える