我有一个项目必须从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;
}
这是数据的示例:
有没有办法可以解决这个问题并使其发挥作用?
-----编辑,将数据样本添加为文本--------
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