我使用以下代码来读取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
请在第二行注意逗号。
当我从逗号记录中获取数组时,我会在下面。
答案 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), "#|#")
该函数用#|#替换引号外的所有逗号(我假设你的输入数据不会出现)。然后将行拆分为#|#而不是逗号的数据字段。