導入CSV包含逗號的內容

先說CSV格式:

(1)列之間使用逗號分隔
(2)如果單列裏的內容有逗號,則用雙引號括起該列,以區別列分隔符的逗號

今天遇到了一個問題,一個外部的CSV文件要導入的數據庫裏,可是某一列中的一個值包含英文逗號,比如某一列放的是公司英文名稱一般爲*****CO.,LTD,大家知道逗號作爲CSV文件的一個關鍵之,那麼在讀取數據的時候,第一列如果按逗號分隔,那麼相應的內容很容易被截斷。這樣就導致了數據的差異性,那麼怎麼解決這個問題呢?

 

System.IO.Stream file = Request.Files[0].InputStream;
System.IO.StreamReader reader = new System.IO.StreamReader(file, System.Text.Encoding.GetEncoding("GBK"));
while (!reader.EndOfStream)
            {
                if (i++ > 2)
                {
                    strMessage = SaveVC(reader.ReadLine());
                    if (strMessage != "true")
                    {
                        Response.Write("<script language=\"javascript\">alert(\"Error!\\n" + strMessage + "\");</script>");
                        break;
                    }
                }
                else
                    reader.ReadLine();
            }
            file.Close();
            reader.Close();

  private string SaveVC(string aData)
    {
        #region 解決CSV導入內容的逗號關鍵字
        string[] DoubleQuotation = aData.Split('"');
        if (DoubleQuotation.Length > 0)
        {
            for (int i = 0; i < DoubleQuotation.Length; i++)
            {
                if (DoubleQuotation[i].Contains(",") && i % 2 != 0)
                {
                    DoubleQuotation[i] = DoubleQuotation[i].Replace(',', FMECommon.str_split_copyright);
                }
            }
        }

        StringBuilder sbStr = new StringBuilder();
        for (int i = 0; i < DoubleQuotation.Length; i++)
        {
            sbStr.Append(DoubleQuotation[i]);
        }
        string newData = sbStr.ToString();

        string[] s = newData.Split(',');
        if (s.Length > 0)
        {
            for (int i = 0; i < s.Length; i++)
            {
                if (s[i].Contains(FMECommon.str_split_copyright.ToString()))
                {
                    s[i] = s[i].Replace(FMECommon.str_split_copyright,',');
                }
            }
        }
        #endregion

        string[] ss = s;
}


 1.首先逐條讀取CSV文件裏的內容

2.使用Split 函數 首先按照“ 進行拆分

3.對於得到的字符串數組,對於偶數列的元素,替換逗號爲其他字符

4.再合併成新的字符串

5.再次使用Split 函數 首先按照,進行拆分

6.對於得到的字符串數組,替換回逗號

發佈了57 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章