【发布时间】: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
vstrLine 是 Elker,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 处理这一点。