读书人

VB Replace函数,该怎么解决

发布时间: 2012-12-15 15:16:03 作者: rapoo

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


[其他解释]

我很奇怪Replace代替函数为什么将我的字符串给截断了!

而且我的字符串可能有好几个"SIN",那就又要循环将字符串分解再和,太麻烦了。代替是最简单的。
[其他解释]
strTemp = "X=-700-80*cos(45) Y50*sin(30)Z=-973+60"
strTemp = Replace(strTemp, "sin(", "[", 1)
strTemp = Replace(strTemp, ")Z", "]Z", 1)
[其他解释]
上面少了个SIN,不能编辑,可恶.
可以这样做:先替换SIN(为SIN[
然后判断到SIN[后的第一个)用MID替换
[其他解释]

Replace 函数的第 4 个参数起始位置,就是开始截取的位置,而不是在保留前面部分的条件下开始替换的位置。

如果想达到自己的需求,可以自己封一个函数。

用正则表达式来解决你这个问题,可能更好用一些。

[其他解释]


谢谢大家,可能大家没有注意到这句话:我的字符串是随机的。
所以“strTemp = Replace(strTemp, ")Z", "]Z", 1) ”方式也不合适。



就是将“SIN”后的第一个“)”换为“]”
[其他解释]
如果还有别的方括号不能替换,则不能用replace,必须:
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

[其他解释]
X=-700-80*cos(45) Y50*sin[30]Z=-973+60
[其他解释]

这种字符串加减的办法和前面的一样,不是很合适。我的字符串是随机的,也可能是:

"X=-700*sin(30)-80*cos(45) Y50*sin(30)Z=-973+60"



代替是最合适的,可以代替多次。
------其他解决方案--------------------


引用:
这种字符串加减的办法和前面的一样,不是很合适。我的字符串是随机的,也可能是:

"X=-700*sin(30)-80*cos(45) Y50*sin(30)Z=-973+60"



代替是最合适的,可以代替多次。


你如果仅替代 sin(x),句中的其他括号不能替代,那只能用这样的方法.
SQL 语言,或者 VFP 里有个STUFF函数,到是比较适合你的,只不过VB里没有这个函数.
[其他解释]
引用:
谢谢大家,可能大家没有注意到这句话:我的字符串是随机的。
所以“strTemp = Replace(strTemp, ")Z", "]Z", 1) ”方式也不合适。



就是将“SIN”后的第一个“)”换为“]”

仔细看3楼代码,已经是正解了
如果是替换最后的,可以把instr换成instrrev
[其他解释]

谢谢,qianjin036a!
也谢谢其他回复者!

看来目前只能用循环处理了。

读书人网 >VB

热点推荐