处理csv文件中的逗号:VBA

时间:2017-11-11 20:07:07

标签: vba ms-access

我使用以下代码来读取csv文件,最后将数据转换为数组。

Function Sample(strPath) As String()
    Dim MyData As String, strData() As String

    Open strPath For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    Sample = Split(MyData, vbCrLf)
End Function

以下代码将每个逗号分隔的行转换为数组。

SaleRows = Sample(filepath)
For Each SaleRow In SaleRows
    SaleRowArray = Split(SaleRow, ",")
Next SaleRow

一切正常但当单元格包含逗号时,我的上述函数失败。有没有办法处理特定单元格中的逗号?

示例csv

enter image description here

请在第二行注意逗号。

当我从逗号记录中获取数组时,我会在下面。

enter image description here

1 个答案:

答案 0 :(得分:1)

CSV文件中的字符串可能会使用引号转义。如果您想使用自己的代码解析CSV,那么您的代码需要能够忽略引号内出现的逗号。

快速执行此操作的方法是使用RegEx。您可以尝试以下方法:

Private Function changeDelimiter(line as String) as String

   Dim regEx As Object
   Set regEx = CreateObject("VBScript.regexp")
   regEx.IgnoreCase = True
   regEx.Global = True
   regex.Pattern = ",(?=([^" & Chr(34) & "]*" & Chr(34) & "[^" & Chr(34) & "]*" & Chr(34) & ")*(?![^" & Chr(34) & "]*" & Chr(34) & "))"

   changeDelimiter = regex.Replace(line, "#|#")

End Function

然后更改代码中的Split()行,如下所示:

SaleRowArray = Split(changeDelimiter(SaleRow), "#|#")

该函数用#|#替换引号外的所有逗号(我假设你的输入数据不会出现)。然后将行拆分为#|#而不是逗号的数据字段。