【问题标题】:Replace comma in a string, BUT only at a specific position in VB.net替换字符串中的逗号,但仅在 VB.net 中的特定位置
【发布时间】:2011-12-12 23:17:43
【问题描述】:

我正在 VB.net 中读取一个 csv 文件并将该行保存到 SQL 数据库。稍后在我的代码中,SQL 行在应用程序中被检索,Split 函数用于获取“字段”值。拆分完成,以逗号作为分隔符。

应用程序处理许多其他文件(包括 excel),并且所有文件都使用拆分功能。

我现在面临的问题是,我读取的一个 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

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

【问题讨论】:

  • 使用filehelpers.com/default.html。它是免费的,并且完全可以处理这个问题。 SO上有很多例子!此外,CSV 中的引号是一种指示文本的方式,FileHelpers 处理这一点。

标签: vb.net replace


【解决方案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

【讨论】:

    【解决方案2】:

    为什么要重新发明轮子?除非您想做一些非常自定义的事情,否则请使用已经制作好的 CSV 阅读器。我会推荐this one

    【讨论】:

      【解决方案3】:

      使用 VB 内置的 TextFieldParser 类。它可以处理读取 csv 文件并正确处理字段中的逗号。

      http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx

      【讨论】:

        猜你喜欢
        • 2017-09-17
        • 1970-01-01
        • 2015-10-18
        • 2013-05-12
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2021-07-27
        • 2021-09-17
        相关资源
        最近更新 更多