VB - 追加到数组?

7
这可能是一个非常简单的问题。但我有一个需要剥离无用部分的数组,但我仍希望它保持为数组。
当它进来时,这个数组看起来像这样:
ArrValues(0) "Firstname=FIRSTNAME"
ArrValues(1) "Lastname=LASTNAME"
ArrValues(2) "Username=USERNAME"
ArrValues(3) "Displayname=DISPLAYNAME"

然后我通过这段代码将该数组发送:

For Each s In arrValues
    s = Split(s, "=")
    s = s(1)
Next

这将去除字符串,只留下FIRSTNAME等内容。但我想把每个清理过的字符串再次放入数组中。我该怎么做?

2
@Tiago - 为什么要使用MID?使用Split函数有什么问题吗? - Joel Goodwin
1
@Joel Goodwin,使用Split没有任何问题。但是split函数依赖于所有值都声明为变体,因为它们将被重新调整大小,即具有一个值“Firstname = FIRSTNAME”的变量将成为具有两个值(Firstname,FIRSTNAME)的数组。使用MID函数,我们将避免这种情况。正如我在帖子中所述,我不是性能专家(是否存在VBA性能专家?),但我认为最好尽可能避免这种redim。尽管如此,Split也可以完成所需的工作。 - Tiago Cardoso
1
我同意@Joel Goodwin关于变量的看法。我们在SO上大部分关于VBA的问题都是针对小型应用程序的,因此使用Split或Mid并不会有太大影响,只要代码能正常工作即可。尽管如此,我认为将用户引导到良好的实践方法,例如适当类型化变量并尽可能避免使用变体,仍然是一个好的做法。 - Tiago Cardoso
1
变量并不被人们所憎恶(实际上它们很棒)。然而,如果变量被错误地使用,那么它们就会被人们所憎恶。 - Tiago Cardoso
1
使用Mid函数更容易处理包含"="的值,例如:Base64enc=c3VyZQ==。 - mgr326639
显示剩余7条评论
2个回答

7
要写回数组,您需要使用 ArrValues(index) = new_value 的表示方法。因此,您需要使用常规的 For 循环而不是 For Each ,并通过它们的索引访问数组元素。以下是如何实现这一点的示例代码:

For i = LBound(ArrValues) To UBound(ArrValues)
 s = ArrValues(i)
 s = Split(s, "=")
 ArrValues(i) = s(1)
Next

3
只要所有字符串都带有“=”符号,这段代码就可以工作...使用MID函数。我不是性能专家,但我相信MID函数比SPLIT函数具有更好的性能(因为SPLIT函数会重新调整每个值)。然而,Helen的代码也可能有效。只是分享一下我的MID方法 :)
Sub MidArray()

    Dim ArrValues(3) As Variant
    Dim vValue As Variant
    Dim iCount As Integer

    ArrValues(0) = "Firstname=FIRSTNAME"
    ArrValues(1) = "Lastname=LASTNAME"
    ArrValues(2) = "Username=USERNAME"
    ArrValues(3) = "Displayname=DISPLAYNAME"

    For iCount = LBound(ArrValues) To UBound(ArrValues)

        ArrValues(iCount) = Mid(ArrValues(iCount), InStr(ArrValues(iCount), "=") + 1)

    Next iCount

End Sub

1
顺便提一下,你的代码没有写回数组 - 这才是问题的实质。 - Helen
翻译:哎呀...谢谢,海伦!代码已修复。 - Tiago Cardoso
谢谢!这实际上是我自己想到的相同的东西 :) 只有一些细微的差别。但是我认为Helen的建议才是我一开始正在寻找的。不过,我还是会将这个设为答案。主要是因为她的声望更高 ;) - Kenny Bones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接