如何遍历字符串并检查每个字符的字节值?
Posted
技术标签:
【中文标题】如何遍历字符串并检查每个字符的字节值?【英文标题】:How to iterate through a string and check the byte value of every character? 【发布时间】:2010-09-09 23:23:06 【问题描述】:我的代码:
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。
【问题讨论】:
【参考方案1】:我相信您的问题是 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
【讨论】:
【参考方案2】:使用 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
【讨论】:
【参考方案3】:你的例子应该被修改,所以它没有外部依赖,它现在依赖于 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
【讨论】:
【参考方案4】:你调试了吗? ;) 你确定 cell_val 不为空吗?此外,您不需要 For 循环中的“步骤 1”,因为它是默认设置。另外,您希望用您的代码完成什么?它记录是否有任何 ascii 值高于 127?但就是这样 - 根据结果没有分支?
【讨论】:
我怀疑他提供了一个针对该问题的简单示例。虽然“第 1 步”是默认设置,但将其留在那里以使代码对读者更清楚也没有什么坏处。【参考方案5】:试试 AscW()
【讨论】:
【参考方案6】:你调试了吗? ;) 你确定 cell_val 不为空?你也不 需要 For 循环中的“步骤 1” 因为它是默认的。还有你是什么 期望完成您的代码?它 记录任何 ascii 值是否高于 127?但就是这样 - 没有 根据结果进行分支?
我没有调试它,我不知道如何使用 vba 或任何与之配套的工具。 是的,我确定 cell_val 不为空。 该代码具有代表性,我在编写分支本身之前确保分支条件有效。
我相信您的问题是,在 VBA 中,字符串索引从 1 开始,而不是从 0 开始。
啊,我一定会错过的与 vba 相关的东西,谢谢。
【讨论】:
【参考方案7】:VB/VBA 字符串是从一开始而不是从零开始的,所以你需要使用:
For iter = 1 To Len(cell_val)
我也没有使用step 1
,因为这是默认设置。
【讨论】:
以上是关于如何遍历字符串并检查每个字符的字节值?的主要内容,如果未能解决你的问题,请参考以下文章