如何迭代字符串并检查每个字符的字节值?
题
我有代码:
cell_val = CStr(Nz(fld.value, ""))
Dim iter As Long
For iter = 0 To Len(cell_val) - 1 Step 1
If Asc(Mid(cell_val, iter, 1)) > 127 Then
addlog "Export contains ascii character > 127"
End If
Next iter
这段代码不起作用。有人知道怎么做吗?我根本不知道 VB 或 VBA。
解决方案
我相信你的问题是在VBA字符串索引从1开始而不是从0开始。请尝试以下操作:
For iter = 1 To Len(cell_val)
If Asc(Mid(cell_val, iter, 1)) > 127 Then
addlog "Export contains ascii character > 127"
End If
Next
其他提示
使用 VBA、VB6,您只需声明一个字节数组并为其分配一个字符串值,它就会为您转换。然后你可以像常规数组一样迭代它。
例如
Dim b() as byte
Dim iter As Long
b = CStr(Nz(fld.value, ""))
For iter = 0 To UBound(b)
if b(iter) > 127 then
addlog "Export contains ascii character > 127"
end if
next
您的示例应该进行修改,使其没有外部依赖项,它现在依赖于 Nz 和 addLog。
不管怎样,这里的问题似乎是你从 0 循环到 len()-1。在 VBA 中,这将是 1 到 n。
Dim cell_val As String
cell_val = "øabcdæøå~!#%&/()"
Dim iter As Long
For iter = 1 To Len(cell_val)
If Asc(Mid(cell_val, iter, 1)) > 127 Then
'addlog "Export contains ascii character > 127"
Debug.Print iter, "Export contains ascii character > 127"
End If
Next iter
你调试了吗?;) 您确定 cell_val 不为空吗?此外,您不需要 For 循环中的“步骤 1”,因为它是默认的。另外,您希望通过您的代码完成什么?它会记录是否有任何 ASCII 值高于 127?但就是这样 - 没有根据结果进行分支?
尝试 AscW()
你调试了吗?;)您确定cell_val不是空的吗?另外,您不需要for循环中的“步骤1”,因为默认值是默认值。另外,您期望对您的代码进行什么?如果任何ASCII值高于127,它会记录吗?但这就是这样 - 没有分支,具体取决于结果吗?
我没有调试它,我不知道如何使用 vba 或任何与之配套的工具。是的,我确信 cell_val 不为空。代码具有代表性,我在编写分支本身之前确保分支条件有效。
我相信你的问题是在VBA字符串索引从1开始而不是从0开始。
啊,正是与 vba 相关的东西,我一定会错过,谢谢。
VB/VBA 字符串基于 1 而不是 0,因此您需要使用:
For iter = 1 To Len(cell_val)
我也离开了 step 1
因为这是默认的。
不隶属于 StackOverflow