2011-04-11 35 views
0

在VBA和VB6中,我可以指定一些東西給mid,例如VBS中的mid(str,1,1)="A"這不起作用。 我需要這個,因爲字符串連接是刻着慢 下面是實際的代碼我砍死在一起,真正的快速mid()= foo在VBS中?

Function fastXMLencode(str) 
    Dim strlen 
    strlen = Len(str) 
    Dim buf 
    Dim varptr 
    Dim i 
    Dim j 
    Dim charlen 
    varptr = 1 
    buf = Space(strlen * 7) 
    Dim char 
    For i = 1 To strlen 
     char = CStr(Asc(Mid(str, i, 1))) 
     charlen = Len(char) 
     Mid(buf, varptr, 2) = "&#" 
     varptr = varptr + 2 
     Mid(buf, varptr, charlen) = char 
     varptr = varptr + charlen 
     Mid(buf, varptr, 1) = ";" 
     varptr = varptr + 1 
    Next 
    fastXMLencode = Trim(buf) 
End Function 

我如何能得到這個在VBS工作?

回答

2

權威人士明確說明它不是可用在VBScript:

Visual Basic for Applications Features Not In VBScript

串:固定長度的字符串LSET,RSET Mid語句中StrConv

VBA既有Mid Statement and Mid Function。 VBScript只有Mid Function。

如果您在VBScript中執行此操作時遇到的另一個選項是 使API調用。既然你已經習慣了直接使用字符串緩衝區,這對你來說可能不會太大。此頁面應該讓你開始: String Functions

對不起,它看起來像API調用都出來了,太:Rube Goldberg Memorial Scripting Page: Direct API Calls除非你想編寫一個ActiveX包裝爲您的呼叫,但我們已經開始進入一個可怕的很多現在工作(和額外的維護要求)。

+1

這篇文章可能也是你感興趣的:[爲什麼字符串很慢](http://www.angelfire.com/pq/jamesbarbetti/articles/strings/001_WhyStringsAreSlow.htm) – mwolfe02 2011-04-11 14:40:02

+0

可悲的是我被VBS卡住了。我最終只是取代了幾個實際出現問題的角色,現在速度夠快了。只要有人在替換列表中使用新的char,我就會很快樂 – lawl0r 2011-04-14 10:41:18

1

你不能那樣做。你將不得不從頭開始重建字符串。

+0

我接受mwolfe02的回答。我知道我不能在中期完成,但我希望有一種替代方法來修改字符串。 – lawl0r 2011-04-11 14:34:07

0

這是不可能的,mid(str,1,1)是一個函數,它只是返回一個數字(str不是通過引用傳遞的,並且沒有被改變)。

+0

我知道這是沒有意義的,但認真的是,你可以做到這一點,至少在VBA中,嘗試在Excel中運行它。 – lawl0r 2011-04-11 13:10:42