如何使用C#的CsvHelper读取CSV文件的指定行及列?
使用CsvHelper读取指定行指定列的数据
核心思路
CsvHelper基于流处理,无法直接跳转到指定行,需逐行读取到目标位置后再提取对应列的数据。以下是两种常见场景的实现代码:
场景1:CSV无表头,行号从1开始计数
using (var reader = new StreamReader("你的文件路径.csv")) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { // 跳过目标行之前的所有行 for (int i = 1; i < rowCounter; i++) { csv.Read(); } if (csv.Read()) { // 第3列对应索引2(CsvHelper列索引从0开始) var targetValue = csv.GetField<string>(2); // 如需其他数据类型,替换<string>为<int>/<double>等 Console.WriteLine(targetValue); } }
场景2:CSV有表头,数据行从第2行开始
如果rowCounter是包含表头的文件行号:
using (var reader = new StreamReader("你的文件路径.csv")) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { // 先读取表头 csv.ReadHeader(); // 跳过表头后,再跳过目标数据行之前的行 int dataRowsToSkip = rowCounter - 2; for (int i = 0; i < dataRowsToSkip; i++) { csv.Read(); } if (csv.Read()) { // 按索引读取第3列 var targetValue = csv.GetField<string>(2); // 也可以通过列名读取:csv.GetField<string>("你的列名") Console.WriteLine(targetValue); } }
注意事项
- 列索引从0开始,第3列对应索引值为2
- 根据CSV是否包含表头,调整跳过的行数逻辑
- 读取数据时可直接指定目标类型(如
int/double),无需手动转换
内容的提问来源于stack exchange,提问作者hiling99
相关产品推荐
相关产品推荐

