从 VBA 中的 csv 文件加载数据期间,将 2 个双引号替换为 1 个双引号
Replace 2 double quotes into 1 double quote during data load from csv file in VBA
我将 csv 文件中的行加载到数组中(Open dataFilePath For Input As #1 等等……)。加载在数组数据中的是 2 个双引号。示例:“”””(空字符串)、“”myText”、“”75823”。问题是后面的代码程序无法正确检测空数组元素或其他数据。我找到了如何将字符串开头和字符串结尾的 2 个双引号替换为 1 个双引号的方法:
For i = 0 To lastArrayIndex
thisString = columnsDataInThisLine(i)
theFirstStringSymbol = Left(thisString, 1)
If theFirstStringSymbol = """" Then
'Replace double double quotes in the string beginning and _
'the end into single double quotes
thisString = Mid(thisString, 2, Len(thisString) - 2)
End If
columnsDataInThisLine(i) = thisString
Next i
在这段代码之后,我得到了我需要的东西——示例:“”(空字符串)、“myText”、“75823”,但也许我在从 csv 文件(编码或其他东西)加载数据期间遗漏了一些东西。也许在 csv 文件读取期间删除加载到数组字符串开头和结尾的这 2 个双引号是更简单的方法?
这个双引号是特定于语言的。如果这些是您想要避免的唯一字符并且您没有任何其他 "strange" 字符,那么您可以遍历 Excel 中单元格的字符并检查它们是否是非标准的(例如,不是前 128 个 ASCII 字符的一部分):
Public Sub TestMe()
Dim stringToEdit As String
Dim cnt As Long
Dim myCell As Range
Dim newWord As String
For Each myCell In Range("A1:A2")
newWord = vbNullString
For cnt = 1 To Len(myCell)
Debug.Print Asc(Mid(myCell, cnt, 1))
If Asc(Mid(myCell, cnt, 1)) >= 127 Then
'do nothing
Else
newWord = newWord & Mid(myCell, cnt, 1)
End If
Next cnt
myCell = newWord
Next myCell
End Sub
因此,假设您有这样的输入:
它会意识到,引号有点奇怪,不应该包含在原文中,因为它们不是 ASCII 中前 128 个单元的一部分 table。
在 运行 代码之后,您将得到一个空单元格和 75823。
我将 csv 文件中的行加载到数组中(Open dataFilePath For Input As #1 等等……)。加载在数组数据中的是 2 个双引号。示例:“”””(空字符串)、“”myText”、“”75823”。问题是后面的代码程序无法正确检测空数组元素或其他数据。我找到了如何将字符串开头和字符串结尾的 2 个双引号替换为 1 个双引号的方法:
For i = 0 To lastArrayIndex
thisString = columnsDataInThisLine(i)
theFirstStringSymbol = Left(thisString, 1)
If theFirstStringSymbol = """" Then
'Replace double double quotes in the string beginning and _
'the end into single double quotes
thisString = Mid(thisString, 2, Len(thisString) - 2)
End If
columnsDataInThisLine(i) = thisString
Next i
在这段代码之后,我得到了我需要的东西——示例:“”(空字符串)、“myText”、“75823”,但也许我在从 csv 文件(编码或其他东西)加载数据期间遗漏了一些东西。也许在 csv 文件读取期间删除加载到数组字符串开头和结尾的这 2 个双引号是更简单的方法?
这个双引号是特定于语言的。如果这些是您想要避免的唯一字符并且您没有任何其他 "strange" 字符,那么您可以遍历 Excel 中单元格的字符并检查它们是否是非标准的(例如,不是前 128 个 ASCII 字符的一部分):
Public Sub TestMe()
Dim stringToEdit As String
Dim cnt As Long
Dim myCell As Range
Dim newWord As String
For Each myCell In Range("A1:A2")
newWord = vbNullString
For cnt = 1 To Len(myCell)
Debug.Print Asc(Mid(myCell, cnt, 1))
If Asc(Mid(myCell, cnt, 1)) >= 127 Then
'do nothing
Else
newWord = newWord & Mid(myCell, cnt, 1)
End If
Next cnt
myCell = newWord
Next myCell
End Sub
因此,假设您有这样的输入:
它会意识到,引号有点奇怪,不应该包含在原文中,因为它们不是 ASCII 中前 128 个单元的一部分 table。
在 运行 代码之后,您将得到一个空单元格和 75823。