我要实现一个功能:有一个文本框,存放用户要处理的文本,还有三个文本框,分别存放前面一个字符串和后面一个字符串,以及要替换的字符串(不太好理解,坚持看完,我们用实例说话)比如文本框一(用户存放要处理的内容)为
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大家看看我的算法是那里错了?
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大家看看我的算法是那里错了?
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个字符中间的内容替换掉
如
asdfgdshjgsdsa
asdsdfhsdjkfhjkdsa
用户输入前面的字符是ASD 后面是DSA 替换后是2222
就是
asd2222dsa
asd2222dsa如
asdghasdhj<sahdjsak>
<sahdsajkdhksja>dgashdghj
用户输入前面的字符是ASD 后面是DSA 替换后是2222就是
asdghasdhj<2222>
<2222>dgashdghj
是这样的意思
asd hkjdfhkdjfh dsa
asd fhsdkjhfkjsdjkasdhkj dsa
asd 9e812h dsa 文本框二(存放前面哪个字符串)为asd
文本框三(存放后面哪个字符串)为dsa
文本框四(替换后的字符串)为qq123 希望得到的效果是:
asd qq123 dsa
asd qq123 dsa
asd qq123 dsa
-------------
最后结果不就是:文本框二 & 文本框四 & 文本框三??
还要什么算法?
982u8912uwaiouasdskjdhaskjncdskjcnskajakhkdsa
<><><98u9asd312897389123dsa
这样的情况要如何处理
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
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
这是我修改后的代码以及效果
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>
<代码><代码>
<代码> </p>
<代码>
<代码>
请输入你要修改的汇款状态编号
<代码>
<代码>
请输入新的状态
<代码>
<代码>
<代码>已付款</option>
<代码>未付款</option>
<代码>
<代码>
<代码>
<代码>
<代码>
<代码>
<代码> </p>
<代码>
<代码>仍然无法解决一行多个的问题
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