0

我有一个空格分隔的字符串变量。我想将变量的内容存储到一个数组中。使用拆分,我可以将每个空格分隔的值存储在一个数组中。如果我可以在每 7 个空格处分隔字符串变量,我会更喜欢。例如,文本可以是:

“喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂喂

这不是字符串的实际内容,而是更易于阅读的更简单版本。我想在单词变化的地方分开,或者每隔 7 个空格分开。任何帮助将不胜感激。我当前的代码看起来像这样,它在每个空间都分开。

    ReDim StatsArray(ArrInc)
    StatsArray = Split(Stats)

    For i = 0 To UBound(StatsArray())
        If i > UBound(StatsArray()) Then
            ReDim Preserve StatsArray(i + ArrInc)
        End If

     '  MsgBox StatsArray(i) ' When not commented out, this help me check the array
    Next
4

3 回答 3

2

没有任何内置函数可以为您执行此操作。我想到了几个解决方案:(1)进行拆分,然后迭代您的数组。连接字符串变量中的七个数组元素。将结果写入新数组。冲洗并重复。(2) 创建一个数组。逐个字符地遍历字符串,将每个字符推入一个变量并跟踪您遇到的空格;当您到达第七个空格时,将一个元素添加到您的数组中,将变量复制到其中并清除该变量。冲洗并重复。

第一个让我觉得有点快,但我可能错了。

于 2013-02-04T21:17:45.117 回答
0

Another stab at it, though I'd probably optimize the ReDim Preserves, doing them in chunks:

Option Explicit

Private Function SplitN( _
    ByRef Source As String, _
    ByVal Delim As String, _
    ByVal N As Long) As String()
    'Delim can be multi-character.
    'Always returns at least 1-element result,
    'even if Source = "".
    Dim SearchPos As Long
    Dim PartPos As Long
    Dim DelimPos As Long
    Dim Parts() As String
    Dim DelimCount As Long
    Dim PartsCount As Long

    SearchPos = 1
    PartPos = SearchPos
    Do
        DelimPos = InStr(SearchPos, Source, Delim)
        If DelimPos > 0 Then
            DelimCount = DelimCount + 1
            If DelimCount = N Then
                DelimCount = 0
                ReDim Preserve Parts(PartsCount)
                Parts(PartsCount) = _
                    Mid$(Source, PartPos, DelimPos - PartPos)
                PartsCount = PartsCount + 1
                PartPos = DelimPos + Len(Delim)
            End If
            SearchPos = DelimPos + Len(Delim)
        End If
    Loop While DelimPos > 0
    ReDim Preserve Parts(PartsCount)
    Parts(PartsCount) = Mid$(Source, PartPos)
    SplitN = Parts
End Function

Private Sub Form_Load()
    Dim S As String
    Dim Parts() As String
    Dim P As Long

    S = "hello hello hello hello hello hello hello " _
      & "hi hi hi hi hi hi hi " _
      & "hey hey hey hey hey hey hey"
    Text1.SelStart = 0
    Text1.SelText = S & vbNewLine & vbNewLine
    Parts = SplitN(S, " ", 7)
    Text1.SelText = "Ubound() = " & UBound(Parts) & vbNewLine
    For P = 0 To UBound(Parts)
        Text1.SelText = Parts(P) & vbNewLine
    Next
End Sub
于 2013-02-05T02:21:07.820 回答
0

如果我理解您要执行的操作,则“1234 12345678 123”字符串将被拆分为 1234、1234567、8、123。这是正确的吗?

如果是这样,那么您可以使用正则表达式为您进行拆分。

Function Split7(S As String)
   Dim regex As New RegExp
   regex.Pattern = "[^ ]{7}"
   regex.Global = True
   Split7 = Split(regex.Replace(S, "$& "), " ")
End Function

这将在每 7 个不是空格的字符后插入一个空格。然后使用 split 函数将整个东西放入一个数组中。

于 2013-02-04T23:16:55.557 回答