使用 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; }
}
我正在使用 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; }
}