替换字符串中的逗号,但仅限于VB.net中的特定位置

时间:2011-12-12 00:54:19

标签: vb.net replace

我正在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

其中vstrLineElker,MissB,"Bus, Taxi, Train, Ferry, Parking, Toll",800253 intStartPos是“

之后逗号的第一个实例

只返回'?'而不是用'?'

替换1逗号的字符串

尝试2:

If vstrLine(intStartPos) = "," Then
    strRetVal = Replace(vstrLine, ",", "?", intStartPos)
end if

它返回一个字符串,所有逗号都替换为'?'

3 个答案:

答案 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