开发者

VB6: Splitling with multi-multicharactered delimiters?

I have a problem with the split function I have currently. I am able to either split with 1 delimited only (split()) or split with many single characters (custom()). Is 开发者_运维百科there a way to split this? Keep in mind that these delimiters are not in order.

 "MY!!DATA@@IS!!LOCATED@@HERE!!IN!!BETWEEN@@THE@@ATS!!AND!!MARKS"

I need your help to get the following result

 "MY" , "DATA" , "IS" , "LOCATED" , "HERE" , "IN" , "BETWEEN","THE", "ATS" , "AND", "MARKS"

thanks


Create a new VB6 EXE project and add a button to the form you will be given, and use the following code for the Button1_Click event:

Private Sub Command1_Click()
    Dim myText As String
    Dim myArray() As String
    Dim InBetweenAWord As Boolean
    Dim tmpString As String
    Dim CurrentCount As Integer

    CurrentCount = 0

    myText = "MY!!DATA@@IS!!LOCATED@@HERE!!IN!!BETWEEN@@THE@@ATS!!AND!!MARKS"

    For i = 1 To Len(myText)
        If (Mid(myText, i, 1) = "@" Or Mid(myText, i, 1) = "!") And InBetweenAWord = True Then
            CurrentCount = CurrentCount + 1
            ReDim Preserve myArray(CurrentCount)
            myArray(CurrentCount) = tmpString
            tmpString = ""
            InBetweenAWord = False
        Else
            If (Mid(myText, i, 1) <> "@" And Mid(myText, i, 1) <> "!") Then
                tmpString = tmpString & Mid(myText, i, 1)
                InBetweenAWord = True
            End If

        End If
    Next

    For i = 1 To CurrentCount
        MsgBox myArray(i)       'This will iterate through all of your words
    Next


End Sub

Notice that once the first For-Next loop is finished, the [myArray] will contain all of your words without the un-desired characters, so you can use them anywhere you like. I just displayed them as MsgBox to the user to make sure my code worked.


Character handling is really awkward in VB6. I would prefer using built-in functions like this

Private Function MultiSplit(ByVal sText As String, vDelims As Variant) As Variant
    Const LNG_PRIVATE   As Long = &HE1B6 '-- U+E000 to U+F8FF - Private Use Area (PUA)
    Dim vElem           As Variant

    For Each vElem In vDelims
        sText = Replace(sText, vElem, ChrW$(LNG_PRIVATE))
    Next
    MultiSplit = Split(sText, ChrW$(LNG_PRIVATE))
End Function

Use MultiSplit like this

Private Sub Command1_Click()
    Dim vElem       As Variant

    For Each vElem In MultiSplit("MY!!DATA@@IS!!LOCATED@@HERE!!IN!!BETWEEN@@THE@@ATS!!AND!!MARKS", Array("!!", "@@"))
        Debug.Print vElem
    Next
End Sub
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜