gpt4 book ai didi

arrays - VBA中的字符串是可以迭代的数组吗?

转载 作者:行者123 更新时间:2023-12-01 17:41:45 27 4
gpt4 key购买 nike

VBA 中字符串是数组吗?

例如,我可以像在 C/C++ 中那样迭代它吗?

做这样的事情:

char myArray[10]; 

for (int i = 0; i < length; i++)
{
cout << myArray[i];
}

VBA 中的等价物是什么?它的行为并不像我预期的那样。以前从未真正尝试过在 VBA 中操作许多字符串! :)

最佳答案

字符串是一个字节数组,如果您知道字符串的两字节实现(或 Unicode,通常每个字符 2 个字节,但可以更多:并且它总是如果您的字符串源自 VBA,则将是 2 字节)。

当我说时,我的意思是:不需要类型转换,这样就可以正常工作:

Public Sub TestByteString()

Dim strChars As String
Dim arrBytes() As Byte
Dim i As Integer


strChars = "The quick Brown Fox"
arrBytes = strChars

Debug.Print strChars
Debug.Print

For i = LBound(arrBytes) To UBound(arrBytes) Step 2

Debug.Print Chr(arrBytes(i)) & vbTab & "Byte " & i & " = " & arrBytes(i)

Next i

arrBytes(0) = Asc("?")
arrBytes(2) = Asc("!")
arrBytes(4) = Asc("*")

strChars = arrBytes

Debug.Print
Debug.Print strChars

Erase arrBytes

End Sub

您的输出将如下所示:

The quick Brown Fox

T Byte 0 = 84h Byte 2 = 104e Byte 4 = 101 Byte 6 = 32q Byte 8 = 113u Byte 10 = 117i Byte 12 = 105c Byte 14 = 99k Byte 16 = 107 Byte 18 = 32B Byte 20 = 66r Byte 22 = 114o Byte 24 = 111w Byte 26 = 119n Byte 28 = 110 Byte 30 = 32F Byte 32 = 70o Byte 34 = 111x Byte 36 = 120

?!* quick Brown Fox

请注意循环中的“第 2 步”:我将丢弃所有其他字节,因为我知道它是普通的拉丁字符 - 对于不懂的人来说是“ASCII”文本。

当您必须处理阿拉伯语和拼音文本时,这会变得很有趣:并且您永远不应该假设在现实世界的工作表中您总是要处理普通的 US ASCII,就像我在演示中所做的那样一 block 。

有关更全面的示例以及更详细的说明,请尝试 Excellerando 中的此操作:

Writing an Excel range to a csv file: optimisations and unicode compatibility

字节数组优化位于底部,在此标题下:

Adler-32 校验和的 VBA 实现,在字节数组上运行,而不是使用 VBA 字符串处理。

字符串的基本性质似乎并没有像应有的那样广为人知:它不是您在代码中经常使用的东西,但 Unicode 和非拉丁字母的许多问题当人们对代码中的变量有更深入的了解时,他们会变得更容易。

关于arrays - VBA中的字符串是可以迭代的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com