【问题标题】: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。

【问题讨论】:

    标签: string excel for-loop 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,因为这是默认设置。

              【讨论】:

                猜你喜欢
                • 2019-10-14
                • 1970-01-01
                • 2021-01-11
                • 1970-01-01
                • 2014-11-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多