我正在寻找关于将一个非常大的字符串分解成许多小字符串的建议。例如,我有一个5000个字符的字符串。我必须将该字符串拆分为不超过450个字符的连续变量数组。以下是最有效的方法吗?
Dim stringSection() as String
Private Sub extractSubStrings(giantString as String)
Dim occurance as Integer
occurance = 0
For i = 1 to Len(giantString)
If i Mod 450 = 1 Or i = Len(giantString) Then
occurance = occurance + 1
ReDim stringSection(occurance)
stringSection = Mid(giantString, i-450, 450)
End If
Next i
End Sub
答案 0 :(得分:5)
这是一个可能有用的VBA功能:
Function BreakUp(s As String, k As Long) As Variant
'returns a 0-based variant array of strings of length <= k
Dim i As Long, m As Long, n As Long
Dim chunks As Variant
n = Len(s)
m = Int(n / k)
If n - k * m > 0 Then 'leftover chunk at end
ReDim chunks(0 To m)
Else
ReDim chunks(0 To m - 1)
End If
For i = 0 To UBound(chunks)
chunks(i) = Mid(s, 1 + k * i, k)
Next i
BreakUp = chunks
End Function
获取数组之后,您可以对其进行迭代,但是如果 all 您想要做的是迭代它,那么上述函数与仅使用Mid
相比没有任何实际好处调用代码中的循环。
答案 1 :(得分:1)
这是一个基于强制分隔符利用Split
保持简单的函数。如果您的字符串可以包含/
Function cut_into_pieces(txt As String, piece_length As Long) As Variant
Dim x As Long, delim As String
delim = "/"
pieces = ""
For x = 0 To Int(Len(txt) / piece_length)
this_piece = Mid(txt, 1 + (x * piece_length), piece_length)
If this_piece <> "" Then cut_into_pieces = cut_into_pieces & this_piece & delim
Next
cut_into_pieces = Split(Left(cut_into_pieces, Len(cut_into_pieces) - 1), delim)
End Function
您可以使用arr = cut_into_pieces(giantString, 450)
答案 2 :(得分:0)
ReDim使用了大量的内存,并且在循环中使用它们是一种很好的做法,在那里你需要ReDim大量的时间。你有没有使用Collection和Do Until循环?你为什么不尝试这个?
Private Sub extractSubStrings(ByVal giantString As String)
Dim colOfSmallStrings As Collection
Set colOfSmallStrings = New Collection
Do
colOfSmallStrings.Add Left$(giantString, 450)
giantString = Mid$(giantString, 451, Len(giantString))
Loop Until Len(giantString) < 450
' Add final piece of string
colOfSmallStrings.Add Left(giantString, 450)
End Sub