[C#]CSV TO DataTable,完成解決欄位名稱中間有空白,或文字欄位會包含雙引號(")的問題

CSV TO DataTable解決欄位名稱中間有空白,或文字欄位會包含雙引號(")的問題

using ServiceStack.Text;

 

class CSVHelper
{
    /// <summary>
    /// CSV TO DataTable via ServiceStack.Text.CSVReader(可以正確處理文字有包含雙引號的資料)
    /// </summary>
    /// <param name="fileName">檔案路徑</param>
    /// <param name="hasTitle">是否包含標題列</param>
    /// <returns>DataTable</returns>
    public static DataTable CSV2DTviaCSVReader(string fileName, bool hasTitle=false)
    {
        DataTable dt = new DataTable();

        bool isFirst = true;
        var csv = File.ReadAllText(fileName, Encoding.GetEncoding(950));

        foreach (var line in CsvReader.ParseLines(csv))
        {
            string[] strArray = CsvReader.ParseFields(line).ToArray();
            //是否為第一筆
            if (isFirst) 
            {   //若第一筆,則進行標題處理
                isFirst = !isFirst;
                for (int i = 0; i < strArray.Length; i++)
                {
                    dt.Columns.Add();

                    if (hasTitle)
                    {
                        //有標題,寫入標題名稱
                        dt.Columns[i].ColumnName = strArray[i];
                    }
                    else
                    {
                        //無標題,寫入替代名稱C1-Cxxx
                        dt.Columns[i].ColumnName = "C" + (i + 1).ToString();
                    }
                }

                //若無標題代表第一行就要有資料
                if (!hasTitle)
                {
                    //寫入資料
                    dt.Rows.Add(strArray);
                }
            }
            else
            {
                //寫入資料
                dt.Rows.Add(strArray);
            }
        }
        return dt;
    }


}

 Written By Felix Hsieh