我必须读取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
答案 0 :(得分:2)
不幸的是,CSV格式很容易出现您所描述的问题。
典型的解决方法是使用另一个分隔符包含值。例如,您可以在每个值周围加上双引号,并请求客户强制执行:
" 540""测试名""的 $ 2,136.02 强>"" 0.15%",& #34; 8004310/01"
从那里开始,你应该有一个行解析器,它读取双引号之间的值,这些值也用逗号分隔。
这不能保证所有问题都会消失(例如,如果其中一个值之间有双引号会怎么样),但是当大多数值都是数字时,它应该减少它。
查看包含有用链接的其他帖子
答案 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