我正在VB.net中读取一个csv文件并将该行保存到SQL数据库中。在我的代码的稍后部分,SQL行在应用程序中被重新获得,并且Split函数用于获取“字段”值。拆分以逗号作为分隔符完成。
应用程序处理许多其他文件(包括excel),并且split函数用于所有这些文件。
我现在面临的问题是我读过的一个csv文件的字段值以“以逗号分隔的多个值后跟另一个”结束。 csv文件的正常读取导致这些单个字段值中的每一个被视为单独的值。希望我有意义吗?
示例行是:
Elker,MissB,"Bus, Taxi, Train, Ferry, Parking, Toll",800253
其中只应分隔为4列,而是将它们分隔为9列。
我想要做的是在'Bus'之后替换逗号,直到'Toll'用'?'代替。
我尝试使用Replace
,包括带有起始位置的重载,但它最终用“?”替换行中的所有逗号
尝试1:
If vstrLine(intStartPos) = "," Then
strRetVal = Replace(vstrLine(intStartPos), ",", "?")
end if
其中vstrLine
是Elker,MissB,"Bus, Taxi, Train, Ferry, Parking, Toll",800253
intStartPos
是“
只返回'?'而不是用'?'
替换1逗号的字符串尝试2:
If vstrLine(intStartPos) = "," Then
strRetVal = Replace(vstrLine, ",", "?", intStartPos)
end if
它返回一个字符串,所有逗号都替换为'?'
答案 0 :(得分:1)
您可以使用与引用值或不包含逗号的值匹配的正则表达式。
示例:
Dim input As String = "Elker,MissB,""Bus, Taxi, Train, Ferry, Parking, Toll"",800253"
Dim values As MatchCollection = Regex.Matches(input, "("".*""|[^,]+)")
For Each value As Match In values
Console.WriteLine(value.Value)
Next
输出:
Elker
MissB
"Bus, Taxi, Train, Ferry, Parking, Toll"
800253
答案 1 :(得分:0)
为什么重新发明轮子?除非您想要做一些非常自定义的事情,否则请使用已经制作的CSV阅读器。我建议this one。
答案 2 :(得分:0)
使用VB内置的TextFieldParser类。它可以处理读取csv文件并正确处理字段中的逗号。
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx