您好,登錄后才能下訂單哦!
這篇文章主要介紹“C#中Csv怎么實現基本的讀寫和轉換”,在日常操作中,相信很多人在C#中Csv怎么實現基本的讀寫和轉換問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#中Csv怎么實現基本的讀寫和轉換”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
csv文件可以在excel或者wps中以表格形式打開,本質上是每一列以,
逗號為分隔符的一種格式,在C#中操作可以把他當做普通txt文本讀入,然后通過處理,
逗號分隔符來對數據進行處理轉換。
在表格中打開:
在記事本中打開:
使用File.ReadAllLines
一次性讀入。File.WriteAllLines
一次性寫入。
這種方式適合csv文件內容不多的情況下使用。
示例:
string path="data.csv"; var lines = File.ReadAllLines(path).ToList();
完整的實現:
/// <summary> /// 讀取Csv,返回行集合 /// </summary> /// <param name="path"></param> /// <param name="hasTitle"></param> /// <returns></returns> public static List<string> ReadCsv(string path, bool hasTitle) { if (!File.Exists(path)) return new List<string>(); var lines = File.ReadAllLines(path).ToList(); if (hasTitle) { lines.RemoveAt(0); } return lines; }
使用StreamReader
,一行一行的讀取文件中的內容,并且處理。寫入類似
示例:
using (StreamReader sr = new StreamReader(path)) { string line; while ((line = sr.ReadLine()) != null) { //處理行數據 } }
將CSV文件讀入數據轉成DataTable類型
/// <summary> /// 讀取Csv文件,加載到DataTable /// </summary> /// <param name="path">csv文件路徑</param> /// <param name="hasTitle">是否有標題行</param> /// <param name="SafeLevel">安全等級:0:錯誤格式行正常添加;1:錯誤行忽略(不添加),2:出現錯誤彈出異常</param> /// <returns></returns> public static DataTable ReadCsvToDataTable(string path, bool hasTitle = false, int SafeLevel = 0) { DataTable dt = new DataTable(); var lines = ReadCsv(path, false); bool isFirst = true; foreach (var item in lines) { string[] values = item.Split(','); if (isFirst) { for (int i = 0; i < values.Length; i++) { dt.Columns.Add(); } if (hasTitle) { for (int i = 0; i < values.Length; i++) { dt.Columns[i].ColumnName = values[i]; } continue; } isFirst = false; } if (values.Length == dt.Columns.Count) { dt.Rows.Add(values); } else { switch (SafeLevel) { case 0: if (values.Length > dt.Columns.Count) { var res = values.ToList(); res.RemoveRange(dt.Columns.Count, values.Length - dt.Columns.Count); dt.Rows.Add(res.ToArray()); } else { dt.Rows.Add(values); } break; case 1: continue; default: throw new Exception("CSV格式錯誤:表格各行列數不一致"); } } } return dt; } /// <summary> /// 以文件流形式讀取Csv文件,加載到DataTable /// </summary> /// <param name="path">csv文件路徑</param> /// <param name="hasTitle">是否有標題行</param> /// <param name="SafeLevel">安全等級:0:錯誤格式行正常添加;1:錯誤行忽略(不添加),2:出現錯誤彈出異常</param> /// <returns></returns> /// <exception cref="Exception"></exception> public static DataTable ReadCsvByStream(string path, bool hasTitle = false, int SafeLevel = 0) { DataTable dt = new DataTable(); bool isFirst = true; using (StreamReader sr = new StreamReader(path)) { string line; while ((line = sr.ReadLine()) != null) { string[] values = line.Split(','); if (isFirst) { for (int i = 0; i < values.Length; i++) { dt.Columns.Add(); } isFirst = false; } //有表頭則添加 if (hasTitle) { for (int i = 0; i < values.Length; i++) { dt.Columns[i].ColumnName = values[i]; } hasTitle = false; } else { if (values.Length == dt.Columns.Count) { dt.Rows.Add(values); } else { switch (SafeLevel) { case 0: if (values.Length > dt.Columns.Count) { var res = values.ToList(); res.RemoveRange(dt.Columns.Count, values.Length - dt.Columns.Count); dt.Rows.Add(res.ToArray()); } else { dt.Rows.Add(values); } break; case 1: continue; default: throw new Exception("CSV格式錯誤:表格各行列數不一致"); } } } } } return dt; }
將DataTable類型寫入到Csv文件中去
/// <summary> /// 以文件流形式將DataTable寫入csv文件 /// </summary> /// <param name="dt"></param> /// <param name="path"></param> /// <param name="hasTitle"></param> /// <returns></returns> public static bool WriteToCsvByDataTable(DataTable dt, string path, bool hasTitle = false) { using (StreamWriter sw = new StreamWriter(path)) { //輸出標題行(如果有) if (hasTitle) { for (int i = 0; i < dt.Columns.Count; i++) { sw.Write(dt.Columns[i].ColumnName); if (i != dt.Columns.Count - 1) { sw.Write(","); } } sw.WriteLine(); } //輸出文件內容 for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { sw.Write(dt.Rows[i][j].ToString()); if (j != dt.Columns.Count - 1) { sw.Write(","); } } sw.WriteLine(); } } return true; }
到此,關于“C#中Csv怎么實現基本的讀寫和轉換”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。