我要实现一个功能:有一个文本框,存放用户要处理的文本,还有三个文本框,分别存放前面一个字符串和后面一个字符串,以及要替换的字符串(不太好理解,坚持看完,我们用实例说话)比如文本框一(用户存放要处理的内容)为
asd hkjdfhkdjfh dsa
asd fhsdkjhfkjsdjkasdhkj dsa
asd 9e812h dsa文本框二(存放前面哪个字符串)为asd
文本框三(存放后面哪个字符串)为dsa
文本框四(替换后的字符串)为qq123希望得到的效果是:
asd qq123 dsa
asd qq123 dsa
asd qq123 dsa以下是我使用的算法
注:
MDIForm1.ActiveForm.Text1.Text是要处理的字符串
Text4.Text是前面的字符串
Text5.Text是后面的字符串
Text6.Text是替换后的字符串
    For i = 1 To Len(MDIForm1.ActiveForm.Text1.Text)
        Debug.Print "调试的内容" & Mid(MDIForm1.ActiveForm.Text1.Text, i, Len(Text4.Text))
        Debug.Print "要替换的内容" & Text4.Text
        Debug.Print "要替换的内容" & Text5.Text
        If Mid(MDIForm1.ActiveForm.Text1.Text, i, Len(Text4.Text)) = Text4.Text Then
                For j = i To Len(MDIForm1.ActiveForm.Text1.Text)
                    Debug.Print "调试的内容" & Mid(MDIForm1.ActiveForm.Text1.Text, j, Len(Text5.Text))
                    Debug.Print "要替换的内容" & Text4.Text
                    Debug.Print "要替换的内容" & Text5.Text
                    If Mid(MDIForm1.ActiveForm.Text1.Text, j, Len(Text5.Text)) = Text5.Text Then
                        Debug.Print Len(MDIForm1.ActiveForm.Text1.Text)
                        Debug.Print i; j
                        th = Left(MDIForm1.ActiveForm.Text1.Text, i - 1 + Len(Text4.Text)) & Text6.Text & Right(MDIForm1.ActiveForm.Text1.Text, Len(MDIForm1.ActiveForm.Text1.Text) - j - 1)
                        MDIForm1.ActiveForm.Text1.Text = th
                        Debug.Print th
                    End If
                Next j
        End If
    Next i
    Unload Me
    Exit Sub我若处理的是
asd hkjdfhkdjfh dsa
asd fhsdkjhfkjsdjkasdhkj dsa
asd 9e812h dsa结果却是
asdqq123a
asdqq123a而不是
asd qq123 dsa
asd qq123 dsa
asd qq123 dsa大家看看我的算法是那里错了?

解决方案 »

  1.   

    算法之一:
    Private Sub Command1_Click()
    Dim tmp() As String, i As Integer, strReplaced As Stringtmp = Split(Text1, vbCrLf)
    Text1 = ""
    For i = 0 To UBound(tmp)
        strReplaced = Trim(Replace(tmp(i), Text2 & " ", ""))
        strReplaced = Trim(Replace(strReplaced, " " & Text3, ""))
        Text1 = Text1 & Replace(tmp(i), strReplaced, Text4) & vbCrLf
    Next i
    End SubPrivate Sub Form_Load()
    Text1 = "asd hkjdfhkdjfh dsa " & vbCrLf & _
    "asd fhsdkjhfkjsdjkasdhkj dsa" & vbCrLf & _
    "asd 9e812h dsa"Text2 = "asd"
    Text3 = "dsa"
    Text4 = "qq123"
    End Sub
      

  2.   

    不是这个意思
    是要把2个字符中间的内容替换掉

    asdfgdshjgsdsa
    asdsdfhsdjkfhjkdsa
    用户输入前面的字符是ASD 后面是DSA 替换后是2222
    就是
    asd2222dsa
    asd2222dsa如
    asdghasdhj<sahdjsak>
    <sahdsajkdhksja>dgashdghj
    用户输入前面的字符是ASD 后面是DSA 替换后是2222就是
    asdghasdhj<2222>
    <2222>dgashdghj
    是这样的意思
      

  3.   

    比如文本框一(用户存放要处理的内容)为 
    asd hkjdfhkdjfh dsa 
    asd fhsdkjhfkjsdjkasdhkj dsa 
    asd 9e812h dsa 文本框二(存放前面哪个字符串)为asd 
    文本框三(存放后面哪个字符串)为dsa 
    文本框四(替换后的字符串)为qq123 希望得到的效果是: 
    asd qq123 dsa 
    asd qq123 dsa 
    asd qq123 dsa 
    -------------
    最后结果不就是:文本框二 & 文本框四 & 文本框三??
    还要什么算法?
      

  4.   

    事情没有这么简单,要处理复杂的情况,如:
    982u8912uwaiouasdskjdhaskjncdskjcnskajakhkdsa
    <><><98u9asd312897389123dsa
    这样的情况要如何处理
      

  5.   

    Dim bs As String, es As String, subs As String, p As String, q As String
    Dim tmp As Stringbs = "asd"
    es = "dsa"
    subs = "qq123"q = -1
    Do
    q = InStrRev(Text1, es, q)
    If q = 0 Then Exit Dop = InStrRev(Text1, bs, q - 1)
    If p = 0 Then Exit Do
    Text1 = Left(Text1, p + Len(bs) - 1) & subs & Mid(Text1, q)
    Debug.Print Text1
    q = p - 1
    Loop
      

  6.   

        
        Dim s As String
        Dim r As String
        Dim b As Long, e As Long
        
        s = "982u8912uwaiouasdskjdhaskjncdskjcnskajakhkdsasffffsf"
        b = InStr(s, "asd")
        e = InStr(s, "dsa")
        r = Mid(s, b, e - b)
        s = Replace(s, r, "asd" & "你要替换的字符")
        Debug.Print s
        '结果:982u8912uwaiouasd你要替换的字符dsasffffsf
      

  7.   

    vbman2003 的方法不错,可是不能进行多个替换,怎么办?
    这是我修改后的代码以及效果
        Dim s As String
        Dim r As String
        Dim b As Long, e As Long
        Dim str() As String
        Dim str1 As String
        str = Split(MDIForm1.ActiveForm.Text1.Text, vbCrLf)    For i = 0 To UBound(str)
                s = str(i)
                b = InStr(s, Text4.Text)
                e = InStr(s, Text5.Text)
                r = Mid(s, b, e - b)
                s = Replace(s, r, Text4.Text & Text6.Text)
                str1 = str1 & vbCrLf & s
        Next i
    执行效果:<代码>
    <代码>
    <代码>
    <代码>
    <代码>无标题文档</title>
    <代码><代码>
    <代码>&nbsp;</p>
    <代码>
      <代码>
      请输入你要修改的汇款状态编号
      <代码>
      <代码> 
      请输入新的状态
      <代码>
      <代码>
        <代码>已付款</option>
        <代码>未付款</option>
      <代码>
      <代码>
      <代码>
      <代码>
      <代码>
    <代码>
    <代码>&nbsp;</p>
    <代码>
    <代码>仍然无法解决一行多个的问题
      

  8.   

        Dim s As String
        Dim r As String
        Dim b As Long, e As Long
        Dim tmp
        Dim i As Long
         
        s = "ABCDEFGasdRRRRRRRRRRRdsaABCDEFGasdRRRdsaCC"
        tmp = Split(s, "dsa")
        s = ""
        For i = 0 To UBound(tmp)
            b = InStr(tmp(i), "asd")
            If b > 0 Then
                r = Mid(tmp(i), b)
                tmp(i) = Replace(tmp(i), r, "asd" & "要替换的字符") & "dsa"
            End If
            s = s & tmp(i)
        Next
        Debug.Print s