【发布时间】:2016-06-02 11:26:19
【问题描述】:
我在封闭的环境中工作,我无法安装额外的包并且使用 .Net 框架类的能力有限。另外,我无法控制收到的 CSV 文件格式。
我收到一个 CSV 文件,必须将其拉入我们的业务系统并更新数据库。
我可以通过以下代码将文件拉入 DataTable ...
CSV File Ex:
Order# Qty Description ...
12345 3 desc1, desc2, desc3, etc..
while (!sr.EndOfStream)
{
string[] rows = sr.ReadLine().Split(',');
DataRow dr = dt.NewRow();
for (int i = 0; i < rows.Length; i++)
{
dr[i] = rows[i];
}
dt.Rows.Add(dr);
}
但是,问题在于 CSV 文件中的一个字段是包含多个“,”字符的描述。执行上述操作会将描述值中的每个逗号分隔的单词集加载到行数组中自己的索引中。
目前 csv 文件中应该总共有 10 列,但是对于描述字段问题,列数会根据描述字段中逗号的长度/数量而有所不同...10、15、22 列等。
在发送 CSV 文件之前,我无法控制它的格式。有什么办法可以解决这个问题。即使在创建 DataTable 时跳过该字段也可以满足我的目的。
谢谢
【问题讨论】:
-
使用 CsvHelper。 nuget.org/packages/CsvHelper
-
不要自己写CSV解析代码,用库吧。
-
@PranavPatel 该解决方案假定 CSV 数据中的逗号已转义。 OP 提到他无法控制输入。
-
如果列总是有一个TAB,然后尝试用
string[] rows = sr.ReadLine().Split('\t');分割它
标签: c# csv datatable streamreader