事情是酱紫滴。。有个短信网关的移动公司,他们返回的回复信息如下:
before = "13798989898//???这是第一条//1010<@>13798989898//???这是第二条//1010<@>13763035656//???新的第一条//8888<@>13763035656//???新的第二条//8888<@>13763035656//???新的第三条//8888<@>13512121212//这是正常的//4512"格式是       号码//内容//扩展号<@>号码//内容//扩展号......想把它变成(凡是带???的都是分段信息,需要人工拼接)after = "13798989898//这是第一条这是第二条//1010<@>13763035656//新的第一条新的第二条新的第三条//8888<@>13512121212//这是正常的//4512"想通过一个function来解决:   
after = MyGOD(before)  '想达到的效果*******************************************************************
为方便观看,我人工整理一下
*******************************************************************
13798989898//???这是第一条//1010
<@>
13798989898//???这是第二条//1010
<@>
13763035656//???新的第一条//8888
<@>
13763035656//???新的第二条//8888
<@>
13763035656//???新的第三条//8888
<@>
13512121212//这是正常的//4512变成13798989898//这是第一条这是第二条//1010
<@>
13763035656//新的第一条新的第二条新的第三条//8888
<@>
13512121212//这是正常的//4512*************************************************************
如果还是觉得理解不了的,可以看看我的猜想图

解决方案 »

  1.   

    Public Function MyGOD(before As String) As String
        Dim info
        Dim info1
        Dim str
        Dim tem
        Dim start_str As String
        Dim end_str As String
        Dim i As Integer
        Dim j As Integer
        info = Split(before, "<@>")
        ReDim info1(UBound(info), 3)
        For Each str In info
            tem = Split(str, "//")
            For i = 0 To 2
                info1(j, i) = tem(i)
            Next
            j = j + 1
        Next
        For i = 0 To UBound(info)
            If info1(i, 0) <> start_str Then
                start_str = info1(i, 0)
                If end_str = "" Then
                    end_str = info1(i, 2)
                Else
                    MyGOD = MyGOD & "//" & end_str & "<@>"
                End If
                MyGOD = MyGOD & start_str & "//"
            End If
            MyGOD = MyGOD & info1(i, 1)
        Next
    End Function
      

  2.   

    这个不难吧?
    Private Sub Form_Load()
    Dim s As String, Cod() As String, Txt() As String
    Dim Ext() As String, Mess() As String, i As Byte
    Dim OutTxt As String
    s = "13798989898//???这是第一条//1010" & _
    "<@>" & _
    "13798989898//???这是第二条//1010" & _
    "<@>" & _
    "13763035656//???新的第一条//8888" & _
    "<@>" & _
    "13763035656//???新的第二条//8888" & _
    "<@>" & _
    "13763035656//???新的第三条//8888" & _
    "<@>" & _
    "13512121212//这是正常的//4512"
    Mess = Split(s, "<@>")
    ReDim Cod(UBound(Mess))
    ReDim Txt(UBound(Mess))
    ReDim Ext(UBound(Mess))
    For i = 0 To UBound(Mess)
        Tmp = Split(Mess(i), "//")
        Cod(i) = Tmp(0)
        Txt(i) = Tmp(1)
        Ext(i) = Tmp(2)
    Next
    For i = 0 To UBound(Mess)
        If InStr(Txt(n), "???") <> 0 Then
            If i = 0 Then
                OutTxt = Cod(0) & "//" & Replace(Txt(i), "???", "")
    'Debug.Print OutTxt
            Else
                If Ext(i) = Ext(i - 1) And Cod(i) = Cod(i - 1) Then
                    OutTxt = OutTxt & Replace(Txt(i), "???", "")
    'Debug.Print OutTxt
                Else
                    OutTxt = OutTxt & "//" & Ext(i - 1) & vbCrLf & "<@>" & vbCrLf & Cod(i) & "//" & Replace(Txt(i), "???", "")
    'Debug.Print OutTxt
                End If
            End If
        Else
            OutTxt = OutTxt & "//" & Ext(i - 1) & vbCrLf & "<@>" & vbCrLf & Cod(i) & "//" & Txt(i) & "//" & Ext(i)
    'Debug.Print OutTxt
        End If
    Next
    Debug.Print OutTxt
    End Sub
    此代码需要处理的文本是按照顺序排列的。号码和ext相同的需要紧挨在一起
      

  3.   

    更正下:Private Sub Form_Load()
    Dim s As String, Cod() As String, Txt() As String
    Dim Ext() As String, Mess() As String, i As Byte
    Dim OutTxt As String
    s = "13798989898//???这是第一条//1010" & _
    "<@>" & _
    "13798989898//???这是第二条//1010" & _
    "<@>" & _
    "13763035656//???新的第一条//8888" & _
    "<@>" & _
    "13763035656//???新的第二条//8888" & _
    "<@>" & _
    "13763035656//???新的第三条//8888" & _
    "<@>" & _
    "13512121212//这是正常的//4512" & _
    "<@>" & _
    "13512128512//这是正常的//4545" & _
    "<@>" & _
    "13763035656//???新的第一条//8888" & _
    "<@>" & _
    "13763035656//???新的第二条//8888"Mess = Split(s, "<@>")
    ReDim Cod(UBound(Mess))
    ReDim Txt(UBound(Mess))
    ReDim Ext(UBound(Mess))
    For i = 0 To UBound(Mess)
        Tmp = Split(Mess(i), "//")
        Cod(i) = Tmp(0)
        Txt(i) = Tmp(1)
        Ext(i) = Tmp(2)
    Next
    For i = 0 To UBound(Mess)
        If InStr(Txt(i), "???") <> 0 Then
            If i = 0 Then
                OutTxt = Cod(0) & "//" & Replace(Txt(i), "???", "")
    '           Debug.Print OutTxt
            Else
                If Ext(i) = Ext(i - 1) And Cod(i) = Cod(i - 1) Then
                    OutTxt = OutTxt & Replace(Txt(i), "???", "")
    '               Debug.Print OutTxt
                Else
                    OutTxt = OutTxt & "//" & Ext(i - 1) & vbCrLf & "<@>" & vbCrLf & Cod(i) & "//" & Replace(Txt(i), "???", "")
    '               Debug.Print OutTxt
                End If
            End If
        Else
            OutTxt = OutTxt & "//" & Ext(i - 1) & vbCrLf & "<@>" & vbCrLf & Cod(i) & "//" & Txt(i) '& "//" & Ext(i)
    '       Debug.Print OutTxt
        End If
    Next
    OutTxt = OutTxt & "//" & Ext(i - 1)
    Debug.Print OutTxt
    End Sub
      

  4.   

    晕,再更正下:
    Private Sub Form_Load()
    Dim s As String, Cod() As String, Txt() As String
    Dim Ext() As String, Mess() As String, i As Byte
    Dim OutTxt As Strings = "13798989898//这是第一条//1110" & _
    "<@>" & _
    "13798989898//???这是第一条//1010" & _
    "<@>" & _
    "13798989898//???这是第二条//1010" & _
    "<@>" & _
    "13763035656//???新的第一条//8888" & _
    "<@>" & _
    "13763035656//???新的第二条//8888" & _
    "<@>" & _
    "13763035656//???新的第三条//8888" & _
    "<@>" & _
    "13512121212//这是正常的//4512" & _
    "<@>" & _
    "13512128512//这是正常的//4545" & _
    "<@>" & _
    "13763035656//???新的第一条//8888" & _
    "<@>" & _
    "13763035656//???新的第二条//8888"Mess = Split(s, "<@>")
    ReDim Cod(UBound(Mess))
    ReDim Txt(UBound(Mess))
    ReDim Ext(UBound(Mess))
    For i = 0 To UBound(Mess)
        Tmp = Split(Mess(i), "//")
        Cod(i) = Tmp(0)
        Txt(i) = Tmp(1)
        Ext(i) = Tmp(2)
    Next
    For i = 0 To UBound(Mess)
        If InStr(Txt(i), "???") <> 0 Then
            If i = 0 Then
                OutTxt = Cod(0) & "//" & Replace(Txt(i), "???", "")
    '           Debug.Print OutTxt
            Else
                If Ext(i) = Ext(i - 1) And Cod(i) = Cod(i - 1) Then
                    OutTxt = OutTxt & Replace(Txt(i), "???", "")
    '               Debug.Print OutTxt
                Else
                    OutTxt = OutTxt & "//" & Ext(i - 1) & vbCrLf & "<@>" & vbCrLf & Cod(i) & "//" & Replace(Txt(i), "???", "")
    '               Debug.Print OutTxt
                End If
            End If
        Else
            If i = 0 Then
                OutTxt = Cod(0) & "//" & Txt(0)
            Else
                OutTxt = OutTxt & "//" & Ext(i - 1) & vbCrLf & "<@>" & vbCrLf & Cod(i) & "//" & Txt(i) '& "//" & Ext(i)
            End If
    '       Debug.Print OutTxt
        End If
    Next
    OutTxt = OutTxt & "//" & Ext(i - 1)
    Debug.Print OutTxt
    End Sub