FileHelpers:混合定界和固定长度记录

cez*_*ann 4 .net c# filehelpers

在这里,我必须使用FileHelpers和C#编写一个记录,其中记录用管道分隔。大部分字段的长度是可变的(因此,我的记录将是[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

}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?我是否必须使用Converter方法并为此编写自己的Converter?

先感谢您。

Sli*_*345 5

对于以后遇到此问题的任何人,这里有一些可以解决此问题的代码。

此类是一个转换器,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');
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以将转换器应用到您的班级,如下所示:

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