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(); //關閉文件