簡體   English   中英

FileHelpers:混合分隔和固定長度記錄

[英]FileHelpers: mixing Delimited and Fixed Length Records

在這里,我必須使用FileHelpers和C#寫出一個記錄為Pipe Separated的文件。 大部分字段都有可變長度(因此,我的記錄將是[DelimitedRecord(“|”)])。 但是某些字段必須具有固定長度(它們必須具有填充,特定格式等)。

我已經搜索了一堆沒有關於如何實現這一目標的目標。

例:

[DelimitedRecord("|")]
public class Customer
{
    public int CustId; //variable length

    public string Name; //variable length

    public decimal Balance; //variable length

    [FieldConverter(ConverterKind.Date, "dd-MM-yyyy")]
    public DateTime AddedDate;

    public int Code; // this one must have 10 characters with "zero-fill", like
             // 153 must look like 0000000153

}

我該如何做到這一點? 我是否必須使用轉換器方法並為此編寫自己的轉換器?

先感謝您。

對於將來遇到此問題的任何人,這里有一些工作代碼來解決這個問題。

此類是一個轉換器,FileHelper引擎將使用該轉換器將整數轉換為字符串,填充為0,最大為構造函數中指定的大小。

public class PaddedIntConverter:ConverterBase
{
    private int _size;
    public PaddedIntConverter(int size)
    {
        _size = size;
    }

    public override object StringToField(string from)
    {
        return int.Parse(from);
    }

    public override string FieldToString(object from)
    {
        return from.ToString().PadLeft(_size,'0');
    }
}

然后轉換器可以應用於您的類,如下所示:

[FixedLengthRecord(FixedMode.ExactLength)]
public class MyClass{
    [FieldFixedLength(7)]
    [FieldConverter(typeof(PaddedIntConverter), 7)]
    public int RecordCount;
}

FileHelpers有一個屬性[FieldFixedLength(xxx)],我相信這應該能得到你想要的東西( http://filehelpers.sourceforge.net/attributes.html )。

正如@TYY所提到的,我編寫了自己的“多用途”轉換器,就像這樣:



    public StringNumberCharConverter(
        string Size, 
        string PaddingChar, 
        string PaddingType, 
        string RemoveSpecialChars)
    { 
        //implementation here 
    }

由於FileHelpers轉換器只接受字符串args,因此我必須解析Converter構造函數中正確對象的所有內容。

對於參數,我將“Size”轉換為“整數”,將PaddingChar轉換為“char”,將PaddingType轉換為自定義填充類型枚舉(即:Padding.LEFT或Padding.RIGHT,如果“left”即將來臨從參數,我應該使用String.PadLeft()等,並將“RemoveSpecialChars”參數轉換為布爾值(標志,以檢查轉換器是否應刪除特殊字符。)

由於我需要Object-to-File轉換,所有轉換邏輯都在ConverterBase抽象方法的“FieldToString”方法實現中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM