1 回答
TA贡献1806条经验 获得超8个赞
无法添加评论,因为我没有足够的业力,所以我在这里问我的问题:所以,如果我理解你的问题,你不能从一个 .csv 文件中添加数据,如果它有超过一行?为什么对 .csv 文件中的行使用 2 种不同的 if 条件?
如果行中有空数据,请不要介意,您仍然可以将它们放置到 DataTable 列中,因此您可以使用循环将 .csv 中的数据添加到 DataTable 中。尝试这样的事情:
public static DataTable CsvToDataTable(string csv)
{
DataTable dt = new DataTable();
string[] lines = csv.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
Regex onlyDeimiterComma = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
for (int i = 0; i < lines.Length; i++)
{
DataRow row = dt.NewRow();
string[] cells = onlyDeimiterComma.Split(lines[i]);
for (int j = 0; j < cells.Length; j++)
{
if (i == 0)
{
if (j == 0)
{
dt.Columns.Add(cells[j], typeof(DateTime));
}
else
{
dt.Columns.Add(cells[j]);
}
}
else
{
row[j] = cells[j];
}
}
dt.Rows.Add(row);
}
return dt;
}
只需在代码中的任何位置调用此方法并从 .csv 文件中读取字符串即可。您可以尝试在此处编译此代码,并查看它如何处理具有不同数据(空列、引用文本、引用逗号)的 .csv 数据
UPD:如果您需要从两个不同的 .csv 文件填充 DataTable,您仍然可以使用上面的代码。只需为两个文件调用两次,然后合并两个 DataTable,如下所示:
DataTable dt = CsvToDataTable(csvFileOne);
DataTable dtTwo = CsvToDataTable(csvFileTwo);
dt.Merge(dtTwo);
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报