VB Replace函数
本帖最后由 hhxngz 于 2012-11-18 21:02:22 编辑
大家好,有个关于VB Replace函数的问题:
目的是将字符串
"X=-700-80*cos(45) Y50*sin(30)Z=-973+60"换为:
"X=-700-80*cos(45) Y50*sin[30]Z=-973+60"
为什么结果是:"sin[30]Z=-973+60",前面一段字符串给丢了!
Private Sub Command1_Click()
Dim strTemp As String
Dim strN As String
Dim intSearch As String
strTemp = "X=-700-80*cos(45) Y50*sin(30)Z=-973+60"
If InStr(1, UCase(strTemp), UCase("SIN(")) Then
strN = Replace(UCase(strTemp), UCase("SIN("), "SIN[", , 1)
End If
intSearch = 0
intSearch = InStr(1, strN, "SIN")
strN = Replace(UCase(strN), UCase(")"), "]", intSearch)
MsgBox strN
End Sub
[最优解释]
给你做个函数吧:
Private Sub Command1_Click()
Dim st As String
st = "X=-700*sin(30)-80*cos(45) Y50*sin(30)Z=-973+60"
Text1 = ReplaceSIN(st)
End Sub
Private Function ReplaceSIN(ByVal st As String) As String
Dim i As Long
Do While InStr(i + 1, LCase(st), "sin(") > 0
i = InStr(i + 1, LCase(st), "sin(")
ReplaceSIN = ReplaceSIN & Left(st, i + 2) & "[" & Mid(st, i + 4, InStr(i, st, ")") - i - 4) & "]"
st = Mid(st, InStr(i, st, ")") + 1)
Loop
ReplaceSIN = ReplaceSIN & st
End Function
'*****结果
'X=-700*sin[30]-80*cos(45) Y50*sin[30]Z=-973+60
'*********
[其他解释]
strN = Replace(UCase(strN), UCase(")"), "]", intSearch)
=>
strN = Replace(UCase(strN), UCase(")"), "]")
[其他解释]
我的字符串是随机的,我只想讲SIN后的第一个")"替换为"]",不能全部替换。
我感觉应该是:
strN = Replace(UCase(strN), UCase(")"), "]", intSearch,1)
但是执行结果是"sin[30]Z=-973+60",
不是我想要的"X=-700-80*cos(45) Y50*sin[30]Z=-973+60"
[其他解释]
Private Sub Command1_Click()
Dim strTemp As String
Dim strN As String, n As Long
Dim intSearch As String
strTemp = "X=-700-80*cos(45) Y50*sin(30)Z=-973+60"
n = InStr(1, UCase(strTemp), UCase("SIN("))
strN = Left(strTemp, n - 1)
strTemp = Replace(strTemp, "(", "[", n, 1)
strTemp = Replace(strTemp, ")", "]", , 1)
strN = strN & strTemp
MsgBox strN
End Sub
Private Sub Command1_Click()
Dim st As String
st = "X=-700-[[[[80*cos(45) Y50*sin[30]Z=-973]]]]+60"
st = Replace(st, "sin[", "sin(")
st = Left(st, InStr(InStr(st, "sin("), st, "]") - 1) & ")" & Mid(st, InStr(InStr(st, "sin("), st, "]") + 1)
Print st
End Sub
Private Sub Command1_Click()
Dim st As String
st = "X=-700-80*cos(45) Y50*sin(30)Z=-973+60"
st = Replace(st, "sin(", "sin[")
st = Left(st, InStr(InStr(st, "sin["), st, ")") - 1) & "]" & Mid(st, InStr(InStr(st, "sin["), st, ")") + 1)
Print st
End Sub