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)分割を行い、配列を反復します。文字列変数で 7 つの配列要素を連結します。結果を新しい配列に書き込みます。すすいで繰り返します。(2) 配列を作成します。文字列を文字ごとに繰り返し処理し、各文字を変数にプッシュして、遭遇したスペースを追跡します。7 番目のスペースに到達したら、配列に要素を追加し、変数をそこにコピーして、変数をクリアします。すすいで繰り返します。

最初のものは少し速いと思いますが、それについてはかなり間違っている可能性があります.

于 2013-02-04T21:17:45.117 に答える
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 に答える
0

別の刺し傷ですが、おそらくReDim Preserves を最適化して、チャンクで実行します。

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 に答える