如何用逗号分隔的CSV读取逗号字段?

时间:2014-04-14 01:32:00

标签: .net csv comma

我必须读取CSV(以Excel打开)文件并将记录存储在数据库中。我正在做的是首先读取字符串数组中的所有行并将数据加载到DataTable然后将其推送到数据库。有些字段中有逗号,因为我使用逗号本身分割字段,这会造成麻烦。 CSV是我从客户那里获得的,我无权要求他们正确格式化。知道如何解决这个问题吗?

代码:

Dim dt As New DataTable
Dim fields() As String
Dim lines() As String = File.ReadAllLines(fileName)

'Create headers
lines(1) = lines(1).Replace(Chr(34), "")
        For Each header As String In lines(1).Split(",")
            dt.Columns.Add(header)
        Next

'Fill data
For i As Integer = 1 To lines.Count() - 1
        fields = lines(i).Split(",")
        dt.Rows.Add(fields)
Next

示例数据行:

540,TestName,**$2,136.02**,0.15%,8004310/01

所以这会打破6个值,因为它应该是5

2 个答案:

答案 0 :(得分:2)

不幸的是,CSV格式很容易出现您所描述的问题。

典型的解决方法是使用另一个分隔符包含值。例如,您可以在每个值周围加上双引号,并请求客户强制执行:

" 540""测试名""的 $ 2,136.02 "" 0.15%",& #34; 8004310/01"

从那里开始,你应该有一个行解析器,它读取双引号之间的值,这些值也用逗号分隔。

这不能保证所有问题都会消失(例如,如果其中一个值之间有双引号会怎么样),但是当大多数值都是数字时,它应该减少它。

查看包含有用链接的其他帖子

CSV parser/reader for C#?

答案 1 :(得分:0)

这就是我用Joel Coehoorn的小费来分类的。使用TextFieldParser是一种更清洁的方式。 (虽然看起来不像它,但在Excel中,字段被引号括起来)

Dim parser As TextFieldParser

parser = New TextFieldParser(fileName)
parser.HasFieldsEnclosedInQuotes = True
parser.SetDelimiters(",")

While Not parser.EndOfData
      fields = parser.ReadFields()
      <--Handle data-->
End While