中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中Csv怎么實現基本的讀寫和轉換

發布時間:2023-02-07 09:23:09 來源:億速云 閱讀:118 作者:iii 欄目:開發技術

這篇文章主要介紹“C#中Csv怎么實現基本的讀寫和轉換”,在日常操作中,相信很多人在C#中Csv怎么實現基本的讀寫和轉換問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#中Csv怎么實現基本的讀寫和轉換”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Csv文件基本的屬性

csv文件可以在excel或者wps中以表格形式打開,本質上是每一列以,逗號為分隔符的一種格式,在C#中操作可以把他當做普通txt文本讀入,然后通過處理,逗號分隔符來對數據進行處理轉換。
在表格中打開:

C#中Csv怎么實現基本的讀寫和轉換


在記事本中打開:

C#中Csv怎么實現基本的讀寫和轉換

Csv讀寫方式

方式一:一次性讀寫

使用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類型

將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怎么實現基本的讀寫和轉換”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

csv
AI

伊吾县| 凤翔县| 南平市| 会理县| 广德县| 阿拉善盟| 原平市| 尼勒克县| 英山县| 沧源| 阿城市| 濮阳县| 洱源县| 长治市| 米易县| 蕲春县| 简阳市| 阿图什市| 临江市| 海伦市| 阳泉市| 辽源市| 永吉县| 滦平县| 图木舒克市| 大厂| 察雅县| 沂源县| 高邑县| 璧山县| 郴州市| 凤台县| 郧西县| 阳高县| 马山县| 五原县| 台湾省| 泌阳县| 灵丘县| 资阳市| 闸北区|