2011-08-11 63 views
2

我需要解析(並構建)固定長度的基於文本的消息,這些消息可能在某些情況下包含數組字段。
實施例:解析具有固定長度字段的可變長度數組的消息

A部分LOTA 02SUBLOT1 SUBLOT2 03TEST1 RESULT1 TEST2 RESULT2 TEST3 RESULT3

如果這是一個對象,它可能使用下面的地塊對象。
部件號(A部)
批號(LOTA)
的2個批次對象(SUBLOT1與數量150和SUBLOT2與數量999)
的3個測試結果(TEST1與結果1234.67890陣列的陣列,... )
請注意,消息中指定了數組項的數量。

我希望能夠使用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

我相信我在過去做過非常相似的事情。

我解決這個問題的方法是使用自定義屬性。這使我可以創建類和嵌套對象,它們完全按照規範中的描述來描述我的數據,並使用自定義屬性來描述數據屬性(長度,類型,填充要求,如果需要等)。

我也最終爲類和屬性編寫了一個自定義的序列化/反序列化,但是實際上特定於實際應用程序,因爲數據是通過定製政府協議傳遞的,定製政府協議也以固定大小的塊或數據包發送和接收數據在具有連續碼等加密套接字

教程