2014-04-02 118 views
0

Replace()已經存在,但該函數將字符串作爲參數。我需要範圍。VBScript字符串替換範圍而不是字符串?

在我的字符串中有兩個長度爲10個字符的「字符串」。 格格用6個字符和4個空格,另一個字符串用10個字符。

"Greger AASSDDFFGG" 

我想替換"Greger ""googlioa "

我在找什麼,基本上是這樣的:

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

有什麼辦法來實現這一目標?

回答

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」)

On s第二個想法(和竊取邦德的填充):

也許我應該介紹10作爲/到/ 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 

您的規格相匹配較好。

+0

這幾乎是它。謝謝! – doge

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)