C# 使用CsvHelper读取.csv文件
1,先到包管理器下载 安装CsvHelper。
2,创建一个与csv文件字段名称相同的类
public class SurveyInfoModel { public string DIST_CD { get; set; } public string SURVEY_CD { get; set; } public string SLSMAN_CD { get; set; } public string SLSMAN_NAME { get; set; } }
3,使用(2)步骤中创建的类,映射获取文件中全部记录(类字段必须与csv文件列名相同)
引用 FileEncoding.DetectFileEncoding(filePathCsv) ,要在在包管理器下载 安装SimpleHelpers.FileEncoding,或者直接默认 new StreamReader(filePathCsv, Encoding.Default);
//检测原文件编码的形式读入,或默认的
string filePathCsv="D:\Projects\test.csv"; StreamReader SRFile = new StreamReader(filePathCsv, FileEncoding.DetectFileEncoding(filePathCsv) ?? Encoding.Default); var csv = new CsvReader(SRFile);//把 数据映射到 SurveyInfoModel,返回一个 IEnumerable<T> 对象 var records = csv.GetRecords<SurveyInfoModel>().ToList(); SRFile.Close(); //关闭文件
4,直接循环获取单独的字段
foreach (var r in records) { string dist_cd = r.DIST_CD; //直接获取字段 }
5,如果.csv列名与类字段名称不相同,那么可以定义一个映射匹配类,CSVHelper是自动根据你的类来自动映射匹配的
private sealed class SurveyInfoModelMap : ClassMap<SurveyInfoModel> { SurveyInfoModelMap() { Map(m=>m.DIST_CD).Name("DIST_CD"); //使用文件列名称指定映射 Map(m => m.SURVEY_CD).Name("SURVEY_CD"); Map(m => m.SLSMAN_CD).Name("SLSMAN_CD"); Map(m => m.SLSMAN_NAME).Name("SLSMAN_NAME"); } }
匹配类建好后,只需要在获取IEnumerable<T> 对象前配置映射匹配类:csv.Configuration.RegisterClassMap<SurveyInfoModelMap>();
//检测原文件编码的形式读入,或默认的 StreamReader SRFile = new StreamReader("D:\Projects\test.csv", FileEncoding.DetectFileEncoding(file) ?? Encoding.Default); var csv = new CsvReader(SRFile); csv.Configuration.RegisterClassMap<SurveyInfoModelMap>(); //配置匹配类 //把 数据映射到 SurveyInfoModel,返回一个 IEnumerable<T> 对象 var records = csv.GetRecords<SurveyInfoModel>().ToList(); SRFile.Close(); //关闭文件