如何让FileHelpers忽略已定义列之后的末尾多余列?
实现多余列自动忽略的配置方法
要让FileHelpers在解析时自动丢弃A、B、C三列之后的所有额外列,不需要修改原有字段定义,只需要在记录类上添加对应的内置特性即可。
修改后的记录类定义
[DelimitedRecord(",")] [IgnoreEmptyLines] // 新增类级特性:自动忽略超出定义字段数的多余列 [IgnoreExtraColumns] public class TestRecord { [FieldCaption("A")] [FieldQuoted(QuoteMode.OptionalForBoth)] public string A; [FieldCaption("B")] [FieldQuoted(QuoteMode.OptionalForBoth)] public string B; [FieldCaption("C")] [FieldQuoted(QuoteMode.OptionalForBoth)] public string C; }
场景适配效果
该配置可以兼容你提到的所有三种数据格式,不会触发列数不匹配的解析错误:
- 当数据行仅包含3列(仅A、B、C列)时:特性无额外影响,按原有规则正常解析
- 当数据行包含4列(多1个D列)、5列(多D、E两列)甚至更多列时:FileHelpers会自动丢弃超出3个定义字段的部分,仅把前3列的内容按规则赋值给A、B、C字段
配套解析注意点
- 该特性默认按列出现顺序匹配赋值,即把数据行的第1列对应A、第2列对应B、第3列对应C,后续列全部忽略
- 示例中第一行是表头(A,B,C,D/E),解析时需要在初始化引擎时开启首行表头标记,避免把表头当成数据记录解析:
var engine = new FileHelperEngine<TestRecord>(); // 标记第一行为表头,跳过不解析 engine.Options.FirstLineIsHeader = true; // 正常读取文件即可 var result = engine.ReadFile("你的目标文件路径");
- 如果实际数据中A、B、C列的位置不固定,需要严格匹配表头名称取值,可以在初始化引擎时开启基于表头的列映射,保证不管列的顺序怎么调整,都能正确取到对应A、B、C表头下的内容,不会出现错位赋值的问题
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

