如何配置CsvHelper检测CSV行是否存在超出表头的额外列?
使用CsvHelper强制检测CSV额外列的配置方法
问题场景
CSV文件最后一列为字符串描述,用户用纯文本编辑器编辑时,若描述包含逗号但未添加引号包裹,会导致该行出现额外列,读取时描述内容会丢失第一个未转义逗号后的部分。需要配置CsvHelper,检测这类异常行并抛出提示异常。
配置方案
CsvHelper中可通过CsvConfiguration.DetectColumnCountChanges配合行内列数校验实现需求,步骤如下:
- 初始化配置时开启列数变化检测:
var config = new CsvConfiguration(CultureInfo.InvariantCulture) { DetectColumnCountChanges = true, };
- 读取CSV时,校验每行实际列数与表头列数是否一致,不一致则抛出异常:
using (var reader = new StreamReader("目标文件.csv")) using (var csv = new CsvReader(reader, config)) { csv.Read(); csv.ReadHeader(); var headerColumnCount = csv.HeaderRecord.Length; while (csv.Read()) { if (csv.Context.Record.Length != headerColumnCount) { throw new InvalidOperationException($"第{csv.Context.Row}行列数异常,疑似描述字段未用引号包裹包含逗号的内容"); } // 读取并处理数据 var data = csv.GetRecord<YourDataModel>(); } }
其他CSV库的实现方式
- LINQtoCSV:在
CsvFileDescription实例中设置IgnoreUnknownColumns = false,即可实现检测额外列并抛出异常 - Lumenworks CSV解析器:支持配置强制列数匹配,当行内列数超过定义数量时抛出错误
内容的提问来源于stack exchange,提问作者colbster
相关产品推荐
相关产品推荐

