在字符串中替换逗号,但仅在VB.net中的特定位置
我正在读取VB.net中的csv文件并将行保存到SQL数据库。在我的代码稍后的一段时间,应用程序中会回顾SQL行,并使用Split函数来获取“字段”值。分割完成后,逗号作为分隔符。在字符串中替换逗号,但仅在VB.net中的特定位置
该应用程序处理许多其他文件(包括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
它返回与全部换成逗号字符串 '?'
可以使用匹配任一引用的值或不含有逗号的值的正则表达式
例:
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
这是一个非常优秀的解决方案。 – UnhandledExcepSean
使用VB中内置的TextFieldParser类。它可以处理读取csv文件,并能正确处理字段中的逗号。
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx
使用http://www.filehelpers.com/default.html。它是免费的,并处理这一点。这里有很多例子!另外,CSV中的引号是表示文本的一种方式,FileHelpers会处理这一点。 – dash