Replace()已经存在,但该函数将字符串作为参数。我需要范围。
在我的字符串中有两个"字符串"这是10个字符长。 Greger有6个字符和4个空格,另一个字符串有10个字符。
"Greger AASSDDFFGG"
我想将"Greger "
替换为"googlioa "
我正在寻找的基本上是这样的:
Replace(MyString,1,10) = "googlioa "
有没有办法实现这个目标?
答案 0 :(得分:2)
如果他们总是成为10个字符,只需填写姓名。
strNameFind = "Greger"
strNameReplace = "googlioa"
' Pad the names...
strNameFind = Left(strNameFind & Space(10), 10)
strNameReplace = Left(strNameReplace & Space(10), 10)
MyString = Replace(MyString, strNameFind, strNameReplace)
或者,如果您不想确定现有名称,只需适当填充新名称并添加字符串的其余部分:
' Pad the new name to fit in a 10-char column...
strNameReplace = "googlioa"
strNameReplace = Left(strNameReplace & Space(10), 10)
' Update the record...
MyString = strNameReplace & Mid(MyString, 11)
答案 1 :(得分:1)
如果要严格按位置替换,请使用Left(),new和Mid()的串联。为了帮助您入门:
>> Function replByPos(s, f, l, n)
>> replByPos = Left(s, f-1) & n & Mid(s, f + l - 1)
>> End Function
>> s = "Greger AASSDDFFGG"
>> r = replByPos(s, 1, 10, "googlioa ")
>> WScript.Echo s
>> WScript.Echo r
>>
Greger AASSDDFFGG
googlioa AASSDDFFGG
>>
进一步改进:
f(rom) - 1
有风险 - 应该检查第二个想法(并窃取邦德的填充):
也许我应该把10作为to / till / upto值而不是长度/宽度规范。所以看看是否
Option Explicit
Function replByPos(src, from, till, ns)
Dim w : w = till - from
replByPos = Left(src, from - 1) & Left(ns & Space(w), w) & Mid(src, till)
End Function
Dim s : s = "Greger AASSDDFFGG"
Dim ns : ns = "googlioa"
WScript.Echo s
WScript.Echo replByPos(s, 1, 10, ns)
s = "Whatever Greger AASSDDFFGG"
ns = "googlioa"
Dim p : p = Instr(s, "Greger")
WScript.Echo s
WScript.Echo replByPos(s, p, p + 10, ns)
输出:
cscript 22811896.vbs
Greger AASSDDFFGG
googlioa AASSDDFFGG
Whatever Greger AASSDDFFGG
Whatever googlioa AASSDDFFGG
更好地符合您的规格。