如何遍历字符串并检查每个字符的字节值?

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,因为这是默认设置。

【讨论】:

以上是关于如何遍历字符串并检查每个字符的字节值?的主要内容,如果未能解决你的问题,请参考以下文章

遍历集合项并检查每个属性的有效值

如何遍历数组并检查数组值

检查字符数组是不是为零的快速方法[重复]

给定一个数组数组,如何从每个值中去掉子字符串“GB”?

循环遍历节点并使用 XSLT 将值附加到字符串

如何遍历数组并根据字符串值删除项目[重复]