为什么Join() - 带有限制64的Split()返回超过64个子串?

时间:2015-07-01 11:27:40

标签: access-vba ms-access-97

我必须将字符串限制为最多64个子字符串,除以;。输入字符串包含113个子字符串:

x2BlackList = "mcc=206,mnc=1,mncLength=2,enbId=180096;mcc=206,mnc=1,mncLength=2,enbId=80459;mcc=206,mnc=1,mncLength=2,enbId=84604;mcc=206,mnc=1,mncLength=2,enbId=180166;mcc=206,mnc=1,mncLength=2,enbId=80279;mcc=206,mnc=1,mncLength=2,enbId=80288;mcc=206,mnc=1,mncLength=2,enbId=80457;mcc=208,mnc=10,mncLength=2,enbId=4791;mcc=206,mnc=1,mncLength=2,enbId=80197;mcc=206,mnc=1,mncLength=2,enbId=80188;mcc=206,mnc=1,mncLength=2,enbId=80195;mcc=206,mnc=1,mncLength=2,enbId=80206;mcc=206,mnc=1,mncLength=2,enbId=181309;mcc=206,mnc=1,mncLength=2,enbId=181218;mcc=206,mnc=1,mncLength=2,enbId=180254;mcc=206,mnc=1,mncLength=2,enbId=80332;mcc=206,mnc=1,mncLength=2,enbId=180340;mcc=206,mnc=1,mncLength=2,enbId=83355;mcc=206,mnc=1,mncLength=2,enbId=180367;mcc=206,mnc=1,mncLength=2,enbId=181222;mcc=206,mnc=1,mncLength=2,enbId=83887;mcc=206,mnc=1,mncLength=2,enbId=181026;mcc=206,mnc=1,mncLength=2,enbId=180356;mcc=206,mnc=1,mncLength=2,enbId=181001;mcc=206,mnc=1,mncLength=2,enbId=84624;mcc=206,mnc=1,mncLength=2,enbId=80209;mcc=206,mnc=1,mncLength=2,enbId=80318;mcc=206,mnc=1,mncLength=2,enbId=80454;mcc=206,mnc=1,mncLength=2,enbId=80471;mcc=206,mnc=1,mncLength=2,enbId=80476;mcc=206,mnc=1,mncLength=2,enbId=80486;mcc=206,mnc=1,mncLength=2,enbId=80526;mcc=206,mnc=1,mncLength=2,enbId=80445;mcc=206,mnc=1,mncLength=2,enbId=80586;mcc=206,mnc=1,mncLength=2,enbId=80212;mcc=206,mnc=1,mncLength=2,enbId=80189;mcc=206,mnc=1,mncLength=2,enbId=80453;mcc=206,mnc=1,mncLength=2,enbId=80474;mcc=206,mnc=1,mncLength=2,enbId=80191;mcc=206,mnc=1,mncLength=2,enbId=181230;mcc=206,mnc=1,mncLength=2,enbId=181394;mcc=206,mnc=1,mncLength=2,enbId=181401;mcc=206,mnc=1,mncLength=2,enbId=83338;mcc=206,mnc=1,mncLength=2,enbId=83395;mcc=206,mnc=1,mncLength=2,enbId=83415;mcc=206,mnc=1,mncLength=2,enbId=180381;mcc=206,mnc=1,mncLength=2,enbId=80180;mcc=206,mnc=1,mncLength=2,enbId=80196;mcc=206,mnc=1,mncLength=2,enbId=80484;mcc=206,mnc=1,mncLength=2,enbId=80204;mcc=206,mnc=1,mncLength=2,enbId=80464;mcc=206,mnc=1,mncLength=2,enbId=80314;mcc=206,mnc=1,mncLength=2,enbId=84580;mcc=206,mnc=1,mncLength=2,enbId=80520;mcc=206,mnc=1,mncLength=2,enbId=83387;mcc=206,mnc=1,mncLength=2,enbId=83376;mcc=206,mnc=1,mncLength=2,enbId=83397;mcc=206,mnc=1,mncLength=2,enbId=83439;mcc=206,mnc=1,mncLength=2,enbId=80324;mcc=206,mnc=1,mncLength=2,enbId=180094;mcc=206,mnc=1,mncLength=2,enbId=80291;mcc=206,mnc=1,mncLength=2,enbId=80293;mcc=206,mnc=1,mncLength=2,enbId=80297;mcc=206,mnc=1,mncLength=2,enbId=80299;mcc=206,mnc=1,mncLength=2,enbId=80307;mcc=206,mnc=1,mncLength=2,enbId=80458;mcc=206,mnc=1,mncLength=2,enbId=80473;mcc=206,mnc=1,mncLength=2,enbId=80502;mcc=206,mnc=1,mncLength=2,enbId=80517;mcc=206,mnc=1,mncLength=2,enbId=80540;mcc=206,mnc=1,mncLength=2,enbId=80583;mcc=206,mnc=1,mncLength=2,enbId=83815;mcc=206,mnc=1,mncLength=2,enbId=83818;mcc=206,mnc=1,mncLength=2,enbId=83823;mcc=206,mnc=1,mncLength=2,enbId=83834;mcc=206,mnc=1,mncLength=2,enbId=84006;mcc=206,mnc=1,mncLength=2,enbId=84018;mcc=206,mnc=1,mncLength=2,enbId=84594;mcc=206,mnc=1,mncLength=2,enbId=84605;mcc=206,mnc=1,mncLength=2,enbId=84610;mcc=206,mnc=1,mncLength=2,enbId=180514;mcc=206,mnc=1,mncLength=2,enbId=180519;mcc=206,mnc=1,mncLength=2,enbId=180523;mcc=206,mnc=1,mncLength=2,enbId=180528;mcc=206,mnc=1,mncLength=2,enbId=180530;mcc=206,mnc=1,mncLength=2,enbId=180611;mcc=206,mnc=1,mncLength=2,enbId=180612;mcc=206,mnc=1,mncLength=2,enbId=180616;mcc=206,mnc=1,mncLength=2,enbId=180618;mcc=206,mnc=1,mncLength=2,enbId=180619;mcc=206,mnc=1,mncLength=2,enbId=180620;mcc=206,mnc=1,mncLength=2,enbId=180623;mcc=206,mnc=1,mncLength=2,enbId=180625;mcc=206,mnc=1,mncLength=2,enbId=180629;mcc=206,mnc=1,mncLength=2,enbId=180814;mcc=206,mnc=1,mncLength=2,enbId=181254;mcc=206,mnc=1,mncLength=2,enbId=181275;mcc=206,mnc=1,mncLength=2,enbId=181466;mcc=206,mnc=1,mncLength=2,enbId=181482;mcc=206,mnc=1,mncLength=2,enbId=181648;mcc=206,mnc=1,mncLength=2,enbId=181737;mcc=234,mnc=10,mncLength=2,enbId=504599;mcc=234,mnc=10,mncLength=2,enbId=504699;mcc=234,mnc=10,mncLength=2,enbId=505533;mcc=234,mnc=10,mncLength=2,enbId=505559;mcc=234,mnc=10,mncLength=2,enbId=505563;mcc=234,mnc=10,mncLength=2,enbId=505627;mcc=234,mnc=10,mncLength=2,enbId=505711;mcc=234,mnc=10,mncLength=2,enbId=505805;mcc=234,mnc=10,mncLength=2,enbId=506130;mcc=234,mnc=10,mncLength=2,enbId=506624;mcc=234,mnc=10,mncLength=2,enbId=506752;mcc=234,mnc=10,mncLength=2,enbId=506888"

使用Split我可以将子串数限制为64:

Dim List() As String, _
    Item As Variant, _
    Counter As Long
Counter = 0
List = Split(x2BlackList, ";", 64)
For Each Item In List
    Counter = Counter + 1
Next
Debug.Print Counter

调试窗口显示64个元素计数。使用Join我想将这64个元素放入一个;作为分隔符的字符串中:

NewBlackList = Join(List, ";")
Debug.Print NewBlackList

但是NewBlackList包含所有113个子串。我已经尝试了上面的代码,以及下面的简化版本(我更喜欢使用),但两者都不会将字符串限制为64个子字符串。

SetBlackList = Join(Split(x2BlackList, ";", 64), ";")

为什么Join() Split(,,64)会返回超过64个子字符串?

1 个答案:

答案 0 :(得分:2)

Split()函数的第三个参数对返回的元素数量设置了限制。然而,它并不意味着丢失了其他元素。它们都是在最后一个元素中返回未分割的。

因此,您将字符串拆分为最多64个子字符串。在这种情况下,第64个元素是元素64到113的未分割值。

当您在结果数组上运行Join()时,您将获得原始字符串。

您需要做的是Split()字符串,然后丢弃您不想要的元素:

List = Split(x2BlackList, ";")

If UBound(List) > 63 Then
    ReDim Preserve List(63)
End If

NewBlackList = Join(List, ";")