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

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

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

Csv文件基本的屬性

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

在這里插入圖片描述


在記事本中打開:

在這里插入圖片描述

Csv讀寫方式

方式一:一次性讀寫

使用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文件讀寫DataTable類型

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

 /// <summary>
 /// 讀取Csv文件,加載到DataTable
 /// </summary>
 /// <param name="path">csv文件路徑</param>
 /// <param name="hasTitle">是否有標(biāo)題行</param>
 /// <param name="SafeLevel">安全等級(jí):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">安全等級(jí):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)換DataTable的文章就介紹到這了,更多相關(guān)C# Csv讀寫和轉(zhuǎn)換DataTable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    C#操作Byte數(shù)組和十六進(jìn)制進(jìn)行互轉(zhuǎn)

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

    Unity UGUI實(shí)現(xiàn)卡片橢圓方向滾動(dòng)

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

    C#9.0 新特性簡(jiǎn)介

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

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

    頁(yè)眉常用于顯示文檔的附加信息,我們可以在頁(yè)眉中插入文本或者圖形,例如,頁(yè)碼、日期、公司徽標(biāo)、文檔標(biāo)題、文件名或作者名等等。那么我們?nèi)绾我跃幊痰姆绞教砑禹?yè)眉呢?這篇文章主要介紹了利用C#如何給PDF文檔添加文本與圖片頁(yè)眉的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C# File類中的文件讀寫方法詳解

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

    C#提供了多種操作文件的方案,尤其是File類中封裝的靜態(tài)方法,本文將通過一些簡(jiǎn)單的示例為大家講講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# 結(jié)構(gòu)體

    詳解C# 結(jié)構(gòu)體

    這篇文章主要介紹了C# 結(jié)構(gòu)體的的相關(guān)資料,文中示例代碼非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 淺析C#的復(fù)制和克隆

    淺析C#的復(fù)制和克隆

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

最新評(píng)論

锡林郭勒盟| 桂阳县| 林周县| 城市| 宁晋县| 平遥县| 扎赉特旗| 武陟县| 鹤壁市| 漳浦县| 孝昌县| 谷城县| 绩溪县| 大余县| 陵川县| 沐川县| 淮滨县| 姜堰市| 高雄市| 思南县| 东平县| 车致| 遂宁市| 荥阳市| 四子王旗| 永宁县| 南丰县| 措勤县| 镇江市| 田阳县| 集安市| 罗定市| 时尚| 邵武市| 福泉市| 阳城县| 长岛县| 吉木乃县| 罗江县| 图木舒克市| 江西省|