使用 C# 中的 FileHelpers 读取包含不同长度的分隔字段的分隔记录?

Read delimited record containing delimited field with varying length with FileHelpers in C#?

我正在使用 MultiRecordEngine() 读取没有 header 和不同类型记录的带分隔符的 .txt 文件。任何记录的前两个字符是我用来识别记录类型的标识符。

我遇到的问题是,在 RecordB(参见下面的示例模型)中,我有一个字段包含多个值,这些值由文件中使用的相同分隔符分隔。而且字段长度也不是固定的,它的长度取决于其中值的数量。例如FieldB-0000-1111-2222-3333-FieldD 其中 0000-1111-2222-3333 需要在 FieldC 中读取。

注意:FieldB 包含一个整数,表示将出现在 FieldC

中的值的数量

我正在使用 MultiRecordEngine() 读取文件并将记录映射到我的不同类型记录的模型。

一个看起来接近我所拥有的样本:

1 个样本模型

[DelimitedRecord("-")]
public class RecordB
{
    public string RecordIdentifier { get; set; }
    public string FieldA { get; set; }
    public string FieldB { get; set; } <-- contains a value determining the amount of values in FieldC
    public string FieldC { get; set; } <-- read delimited values to this field [delimiter: -]
    public string FieldD { get; set; }
    public string FieldE { get; set; }
}

正在使用 MultiRecordEngine 读取文件

new MultiRecordEngine(RecordSelector,
    typeof(RecordA),
    typeof(RecordB),
    typeof(RecordC),
);

我的 RecordSelector 类似于:

switch (recordType)
{
    case "XX":
        return typeof(RecordA);
    case "XY":
        return typeof(RecordB);
    default:
        return null;
}

我确实尝试在模型上使用 [DelimitedRecord("-")][FixedLengthRecord(FixedMode.AllowLessChars)] 的组合,在现场尝试使用 [FieldDelimiter("~")],但没有成功。有什么我想念的吗?请指教

我找到了解决方法。我使用下面的模型只读取我知道的包含分隔字段的记录,稍后拆分值并按索引获取它们。

[FixedLengthRecord(FixedMode.ExactLength)]
public class RecordB
{
    [FieldFixedLength(100)]
    public string WholeRecord { get; set; }
}