VBScript字符串替换为范围而不是字符串?

时间:2014-04-02 12:43:36

标签: string vbscript replace

Replace()已经存在,但该函数将字符串作为参数。我需要范围。

在我的字符串中有两个"字符串"这是10个字符长。 Greger有6个字符和4个空格,另一个字符串有10个字符。

"Greger    AASSDDFFGG"

我想将"Greger "替换为"googlioa "

我正在寻找的基本上是这样的:

Replace(MyString,1,10) = "googlioa  "

有没有办法实现这个目标?

2 个答案:

答案 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
>>

进一步改进:

  1. 安全:f(rom) - 1有风险 - 应该检查
  2. 填充新字符串wrt l(ength)
  3. 也许你想在连接之前搜索(Instr())旧(“Greger”)
  4. 第二个想法(并窃取邦德的填充):

    也许我应该把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
    

    更好地符合您的规格。