1. 程式人生 > >C#讀取CSV檔案到DataTable

C#讀取CSV檔案到DataTable

今天做個小程式,需要批量讀取CSV檔案到資料庫,網上有不少CSVHelper,但是看了下,多少都有點問題,主要是分割逗號問題,還有就是欄位處理問題。我自己做了些改良,用起來不錯。

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;


namespace BtsMaster
{
 public  class CSVhelper
    {
        
        /// <summary>
        /// 將Csv讀入DataTable
        /// </summary>
        /// <param name="filePath">csv檔案路徑</param>
        /// <param name="n">表示第n行是欄位title,第n+1行是記錄開始</param>
        /// <param name="k">可選引數表示最後K行不算記錄預設0</param>
        public  DataTable csv2dt(string filePath, int n,DataTable dt) //這個dt 是個空白的沒有任何行列的DataTable
        {
            String csvSplitBy = "(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)";  
            StreamReader reader = new StreamReader(filePath,  System.Text.Encoding.Default, false);
            int i = 0, m = 0;
            reader.Peek();
            while (reader.Peek() > 0)
            {
                m = m + 1;
                string str = reader.ReadLine();               
                if (m >= n + 1)
                {
                    if (m == n + 1) //如果是欄位行,則自動加入欄位。
                    {
                        MatchCollection mcs = Regex.Matches(str, csvSplitBy);
                        foreach (Match mc in mcs)
                        {                           
                            dt.Columns.Add(mc.Value); //增加列標題
                        }                      
                       
                    }
                    else
                    {
                        MatchCollection mcs = Regex.Matches(str, "(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)");
                        i = 0;
                        System.Data.DataRow dr = dt.NewRow();
                        foreach (Match mc in mcs)
                        {  
                            dr[i] = mc.Value;
                            i++;
                        }                  
                            dt.Rows.Add(dr);  //DataTable 增加一行     
                    }
                    
                }
            }
            return dt;
        }


    }
    
}

注意,如果CVS檔案最後一行不是你想要的,可以通過DataTable.Rows.RemoveAt(RowsCount-1)來刪除,比如dt.Rows.RemoveAt(dt.Rows.Count-1)


相關推薦

C#讀取CSV檔案DataTable

今天做個小程式,需要批量讀取CSV檔案到資料庫,網上有不少CSVHelper,但是看了下,多少都有點問題,主要是分割逗號問題,還有就是欄位處理問題。我自己做了些改良,用起來不錯。 using System; using System.Collections.Gener

C++讀取CSV檔案

寫入資料到CSV檔案 #include <iostream> #include <fstream> #include <iomanip> #include <sstream> #include <string> u

C++讀取CSV檔案,並將逗號分隔符檔案分割成N個數組

#include <stdio.h> #include <string.h> // #include <windows.h> #define MAXLINE 256 struct student {     char stuName[10

c++讀取csv檔案和寫入檔案

一直以來感覺對檔案的讀寫和流的使用比較陌生,最近在寫的一個project正好需要讀取csv檔案的資料和建立新的csv檔案,於是在網上看了一些對csv檔案讀寫操作的文章,基本瞭解了大概的操作。 讀取.

c# 讀取csv檔案的三種方式

class operateCSV     {         /// <summary>         /// 讀取CSV檔案通過文字格式         /// </summary>         /// <param name="strpath"></para

C#讀取CSV檔案並儲存進資料庫

/// <summary>       /// 讀檔案       /// </summary>       /// <param name="path">檔案路徑</param

C++讀取.csv檔案

//.csv檔案可以用excel開啟 struct Feature{ int ID int age;//年齡 int gender; }User; #include<

C#開發小試手----小功能:C#讀取csv檔案——針對兩種不同需求的表頭

在練習過程中先後遇到了以下兩種需求:完整讀取CSV檔案,包括CSV檔案的表頭只讀取CSV檔案內容,表頭自定義新增針對需求1,程式碼如下://*********************************csv2dt----讀取csv表頭方案****************

讀取CSV檔案DataTable--C#

從CSV讀取資料到DataTable(這裡第一行是標題,因此需要排除): /// <summary> /// generate DataTable instance fro

讀取csv 檔案 c#

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ReadCSV

c語言讀取csv檔案

{  FILE*fp;floatvalue; system_time_t system_time; charline[MAX_LINE];if((fp=fopen("d:\\1.csv","r"))==NULL) {    printf("Can't open d:\\1.csv\n"); }  memset

c++較好程式:讀取csv檔案

class file_reader_t { private:     ifstream input; public:     trace_reader_t(string filename)         : input(filename.c_str())     {  

讀取CSV檔案DataTable

由於專案需要,所以寫了這麼個方法。 最初是使用odbc,將csv作為一個數據源讀取,但後來發現效率差很多,而且讀取的資料型別有問題  public static DataTable ReadCSVToTable(string filePath) {            Da

如何讀取CSV檔案DataTable中,然後存到資料庫

public void FileToDB()         {             string line = "";//將檔案中的一行資料讀出,賦值給line             int i = 0;//計數檔案中的行數               i

C語言讀取CSV檔案的方法1

1、字串處理中的 strtok() 函式我們首先來介紹C語言標準庫中的一個非常有用的字串處理函式 strtok(),該函式位於標頭檔案string.h中,它的原型是:char *strtok( char

讀取csv檔案內容到DataTable

int intColCount = 0; bool blnFlag = true; DataTable mydt = new DataTable("myTableName"); DataColumn mydc; DataRow mydr; string str

C語言讀取CSV檔案的方法2

在之前的文章中,我們已經介紹了利用strok()函式對CSV檔案進行解析的基本方法。本文將在此基礎上更進一步,我們要將一個用CSV檔案儲存的表格資料放進一個二維陣列中。首先來看看作為示例的一個小型的CS

android讀取csv檔案資料

csv檔案是一種表格形式的檔案,如果把檔案字尾名改為.txt,會發現同一行資料之間是用英文“,”隔開的。 如何讀取csv檔案以便把資料存入資料庫呢,特別是csv檔案中有些資料是空? csv檔案如下: 把檔案字尾名改為.txt後如下: 電錶id,電錶編號,模組地址,描述,所屬站點名稱,

C#讀取txt檔案並畫圖

tools.cs using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; us

C 讀取文字檔案C 寫文字檔案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!