您好,登錄后才能下訂單哦!
這篇文章主要介紹“C#中Csv怎么實(shí)現(xiàn)基本的讀寫和轉(zhuǎn)換”,在日常操作中,相信很多人在C#中Csv怎么實(shí)現(xiàn)基本的讀寫和轉(zhuǎn)換問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#中Csv怎么實(shí)現(xiàn)基本的讀寫和轉(zhuǎn)換”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
csv文件可以在excel或者wps中以表格形式打開,本質(zhì)上是每一列以,
逗號為分隔符的一種格式,在C#中操作可以把他當(dāng)做普通txt文本讀入,然后通過處理,
逗號分隔符來對數(shù)據(jù)進(jìn)行處理轉(zhuǎn)換。
在表格中打開:
在記事本中打開:
使用File.ReadAllLines
一次性讀入。File.WriteAllLines
一次性寫入。
這種方式適合csv文件內(nèi)容不多的情況下使用。
示例:
string path="data.csv"; var lines = File.ReadAllLines(path).ToList();
完整的實(shí)現(xiàn):
/// <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
,一行一行的讀取文件中的內(nèi)容,并且處理。寫入類似
示例:
using (StreamReader sr = new StreamReader(path)) { string line; while ((line = sr.ReadLine()) != null) { //處理行數(shù)據(jù) } }
將CSV文件讀入數(shù)據(jù)轉(zhuǎn)成DataTable類型
/// <summary> /// 讀取Csv文件,加載到DataTable /// </summary> /// <param name="path">csv文件路徑</param> /// <param name="hasTitle">是否有標(biāo)題行</param> /// <param name="SafeLevel">安全等級:0:錯(cuò)誤格式行正常添加;1:錯(cuò)誤行忽略(不添加),2:出現(xiàn)錯(cuò)誤彈出異常</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格式錯(cuò)誤:表格各行列數(shù)不一致"); } } } return dt; } /// <summary> /// 以文件流形式讀取Csv文件,加載到DataTable /// </summary> /// <param name="path">csv文件路徑</param> /// <param name="hasTitle">是否有標(biāo)題行</param> /// <param name="SafeLevel">安全等級:0:錯(cuò)誤格式行正常添加;1:錯(cuò)誤行忽略(不添加),2:出現(xiàn)錯(cuò)誤彈出異常</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格式錯(cuò)誤:表格各行列數(shù)不一致"); } } } } } 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)) { //輸出標(biāo)題行(如果有) 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(); } //輸出文件內(nèi)容 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; }
到此,關(guān)于“C#中Csv怎么實(shí)現(xiàn)基本的讀寫和轉(zhuǎn)換”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。