VB6: Разделение с разделителями из нескольких символов? - PullRequest
1 голос
/ 21 июня 2011

У меня проблема с функцией разделения, которая у меня есть в настоящее время. Я могу либо разделить только с одним разделителем (split ()), либо разделить на несколько отдельных символов (custom ()) Есть ли способ разделить это? Имейте в виду, что эти разделители не в порядке.

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

Мне нужна ваша помощь, чтобы получить следующий результат

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

спасибо

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Создайте новый проект VB6 EXE и добавьте кнопку в форму, которую вам дадут, и используйте следующий код для события Button1_Click:

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

Обратите внимание, что после первого цикла For-NextВ завершение, [myArray] будет содержать все ваши слова без ненужных символов, так что вы можете использовать их где угодно.Я просто отобразил их как MsgBox, чтобы убедиться, что мой код работает.

1 голос
/ 21 июня 2011

Обработка символов в VB6 очень неудобная. Я бы предпочел использовать встроенные функции, такие как

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

Используйте MultiSplit как это

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...