最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# Csv實現(xiàn)基本的讀寫和轉換DataTable

 更新時間:2023年02月05日 12:22:50   作者:海盜1234  
本文主要介紹了C# Csv實現(xiàn)基本的讀寫和轉換DataTable,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Csv文件基本的屬性

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

在這里插入圖片描述


在記事本中打開:

在這里插入圖片描述

Csv讀寫方式

方式一:一次性讀寫

使用File.ReadAllLines一次性讀入。File.WriteAllLines一次性寫入。
這種方式適合csv文件內容不多的情況下使用。
示例:

string path="data.csv";
 var lines = File.ReadAllLines(path).ToList();

完整的實現(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,一行一行的讀取文件中的內容,并且處理。寫入類似
示例:

using (StreamReader sr = new StreamReader(path))
{

      string line;
      while ((line = sr.ReadLine()) != null)
      {
			//處理行數(shù)據(jù)
          
          
      }
  }

Csv文件讀寫DataTable類型

將CSV文件讀入數(shù)據(jù)轉成DataTable類型

 /// <summary>
 /// 讀取Csv文件,加載到DataTable
 /// </summary>
 /// <param name="path">csv文件路徑</param>
 /// <param name="hasTitle">是否有標題行</param>
 /// <param name="SafeLevel">安全等級:0:錯誤格式行正常添加;1:錯誤行忽略(不添加),2:出現(xiàn)錯誤彈出異常</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格式錯誤:表格各行列數(shù)不一致");
             }

         }
     }


     return dt;
 }

 /// <summary>
 /// 以文件流形式讀取Csv文件,加載到DataTable
 /// </summary>
 /// <param name="path">csv文件路徑</param>
 /// <param name="hasTitle">是否有標題行</param>
 /// <param name="SafeLevel">安全等級:0:錯誤格式行正常添加;1:錯誤行忽略(不添加),2:出現(xiàn)錯誤彈出異常</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格式錯誤:表格各行列數(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))
    {
        //輸出標題行(如果有)
        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實現(xiàn)基本的讀寫和轉換DataTable的文章就介紹到這了,更多相關C# Csv讀寫和轉換DataTable內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于c#圖像灰度化、灰度反轉、二值化的實現(xiàn)方法詳解

    基于c#圖像灰度化、灰度反轉、二值化的實現(xiàn)方法詳解

    本篇文章是對c#圖像灰度化、灰度反轉、二值化的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個維度的長度

    C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個維度的長度

    這篇文章介紹了C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個維度的長度,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • C#操作Byte數(shù)組和十六進制進行互轉

    C#操作Byte數(shù)組和十六進制進行互轉

    這篇文章介紹了C#操作Byte數(shù)組和十六進制進行互轉的的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Unity UGUI實現(xiàn)卡片橢圓方向滾動

    Unity UGUI實現(xiàn)卡片橢圓方向滾動

    這篇文章主要為大家詳細介紹了UGUI實現(xiàn)卡片橢圓方向滾動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C#9.0 新特性簡介

    C#9.0 新特性簡介

    這篇文章主要介紹了C#9.0 新特性簡介,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 利用C#如何給PDF文檔添加文本與圖片頁眉

    利用C#如何給PDF文檔添加文本與圖片頁眉

    頁眉常用于顯示文檔的附加信息,我們可以在頁眉中插入文本或者圖形,例如,頁碼、日期、公司徽標、文檔標題、文件名或作者名等等。那么我們如何以編程的方式添加頁眉呢?這篇文章主要介紹了利用C#如何給PDF文檔添加文本與圖片頁眉的相關資料,需要的朋友可以參考下
    2017-01-01
  • C# File類中的文件讀寫方法詳解

    C# File類中的文件讀寫方法詳解

    C#提供了多種操作文件的方案,尤其是File類中封裝的靜態(tài)方法,本文將通過一些簡單的示例為大家講講C#讀寫文件的方法,需要的可以參考一下
    2023-05-05
  • c#判斷操作系統(tǒng)位數(shù)的示例分享

    c#判斷操作系統(tǒng)位數(shù)的示例分享

    這篇文章主要介紹了c#判斷操作系統(tǒng)位數(shù)的示例,在.net 4.5中,判斷操作系統(tǒng)不用再寫方法去判斷了,有直接可以利用的屬性了哦
    2014-01-01
  • 詳解C# 結構體

    詳解C# 結構體

    這篇文章主要介紹了C# 結構體的的相關資料,文中示例代碼非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • 淺析C#的復制和克隆

    淺析C#的復制和克隆

    這篇文章主要介紹了淺析C#的復制和克隆,需要的朋友可以參考下
    2014-07-07

最新評論

威海市| 益阳市| 当涂县| 义马市| 临潭县| 黑龙江省| 永康市| 普格县| 镇安县| 晋中市| 贵德县| 秦皇岛市| 宿松县| 陵川县| 新巴尔虎左旗| 深泽县| 绍兴县| 江源县| 富裕县| 芒康县| 长治县| 高雄县| 华亭县| 松原市| 毕节市| 句容市| 满洲里市| 寿阳县| 浏阳市| 福鼎市| 古交市| 谷城县| 延吉市| 思南县| 长子县| 赣州市| 吉木乃县| 永寿县| 恩施市| 乌兰浩特市| 类乌齐县|