CSV用数据中的逗号读取数据

时间:2017-05-24 07:48:11

标签: c# asp.net csv

我有一个项目必须从CSV文件批量导入SQL。创建数据列已经取得了成功,但是,我遇到了行的问题。逗号用作分隔符,用于分隔在列名称中有效但在数据行中不起作用的列。有些数据用逗号分隔姓名和姓氏。与此同时,只有每个第二个字段(列)用双引号括起来。使用所有这些就会破坏更多列中的行。我建议将分隔符更改为分号,实际上工作得很好,一切正常,但客户不接受,因为他们不想改变任何内容。

这就是我所做的:

    private static DataTable ImportFordEmailList(string csvFilePath)
    {
        DataTable csvData = new DataTable();

        DataTable dt = new DataTable();
        dt.Columns.Add("ColumnName");
        dt.Rows.Clear();

        try
        {
            using (TextFieldParser csvReader = new TextFieldParser(csvFilePath))
            {
                //  csvReader.TextFieldType = FieldType.Delimited;
                csvReader.SetDelimiters(new string[] { "," });
                csvReader.HasFieldsEnclosedInQuotes = false;
                csvReader.TrimWhiteSpace = true;

                string[] colFields = csvReader.ReadFields();

                foreach (string column in colFields)
                {
                    if (dt.Rows.Count > 0)
                    {
                        string newColumn = Regex.Replace(column, "[^A-Za-z0-9]", "");
                        string findColum = "ColumnName = '" + newColumn.Trim() + "'";
                        DataRow[] foundRows = dt.Select(findColum);

                        if (foundRows.Length == 0)
                        {
                            DataRow dr = dt.NewRow();
                            dr["ColumnName"] = newColumn.Trim();
                            dt.Rows.Add(dr);
                        }
                        else
                        {
                            DataRow dr = dt.NewRow();
                            dr["ColumnName"] = newColumn.Trim() + "1";
                            dt.Rows.Add(dr);
                        }                         
                    }
                    else
                    {
                        string newColumn = column.Replace("'", "");
                        newColumn = newColumn.Replace(" ", "");
                        string clean = Regex.Replace(newColumn, "[^A-Za-z0-9 ]", "");
                        DataRow dr = dt.NewRow();
                        dr["ColumnName"] = clean.Trim();                            
                        dt.Rows.Add(dr);
                    }
                }

                foreach (DataRow row in dt.Rows)
                {
                    string colName = Regex.Replace(row["ColumnName"].ToString().Trim(), "/^[ A-Za-z0-9]*$/", "");

                    DataColumn datecolumn = new DataColumn(colName);
                    datecolumn.AllowDBNull = true;
                    csvData.Columns.Add(datecolumn);
                }

                while (!csvReader.EndOfData)
                {
                    string[] fieldData = csvReader.ReadFields();

                    for (int i = 0; i < fieldData.Length; i++)
                    {
                        if (fieldData[i] == "")
                        {
                            fieldData[i] = null;
                        }
                    }

                    foreach (string s in fieldData)
                    {
                         s.Replace("\"","");
                         Regex.Replace(s, "/^[ A-Za-z0-9 '@.()]", "");
                         string a = s;
                    }

                    csvData.Rows.Add(fieldData);
                }
            }
        }
        catch (Exception ex)
        {
        }
        return csvData;
    }

这是数据的示例:

enter image description here

有没有办法可以解决这个问题并使其发挥作用?

-----编辑,将数据样本添加为文本--------

    Name,Name,Email,Manager Level1,Level 1 manager's email,Manager Level2,Level 2 manager's email
    Adams, D. (Deon)              ,"Adams, Deon. (D)              ",username@email.com,"Masete, Thabo (B.T.)",username@email.com,"Fraser, Mervyn (M.)",username@email.com
    Akaramunkongwanit,  S. (Sirapra) ,"Akaramunkongwanit, Sirapra  (S.)",username@email.com> ,"Naraphirom, Suphajitphat (Pin.)",username@email.com,"Jeeradeepalung, Jirawat (Jee.)",username@email.com
    Angel, L. (Dave)              ,"Angel, Dave (L.) ",username@email.com,"Causton, Keith (K.H.) ",username@email.com,"White, Chris- Manf Eng (C.F.) ",username@email.com
    Apairat, J. (Janjira),"Apairat, Janjira (J.) "username@email.com,"Choksiriwanna, Phatthar  (Patsy.)",username@email.com,"Phusitpoykai, Rachawan (R.) ",username@email.com

0 个答案:

没有答案