读《VBScript程序员参考手册》,做的笔记
生活随笔
收集整理的這篇文章主要介紹了
读《VBScript程序员参考手册》,做的笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在圖書館能找到的關于VBScript的書,大部分都是05年、03年。這本是09年,但是,依然太舊太舊。 日新月異,還是不要學習VBScript,去學習其他語言吧。 以下是我覺得值得一記的地方,與諸兄共勉。
強制轉換類型 varTest = CLng(12) 這就是告訴VBScript要確保該變量的子類型是Long
當運行不符合數據類型的情況時: varTest = CInt("Hello") 會產生一個運行的錯誤:“Type Mismatch”。
Is函數 IsNumeric()函數可檢查用戶是否輸入了有效的數字 IsDate()同理 一個通用的原則:永遠都不要盲目地信任或假設外部數據——比如數據庫、文件、網頁、尤其是用戶輸入的數據
在從數據庫或某些函數獲取數據時,要注意NULL值 strCustomerName = "" & rsCustomers.Fields("Name").Value 這里演示的技巧時VBScript中您學到的最有用的技巧之一。這個技巧可以有效地利用VBScript的隱式類型轉換,避免因Null值而產生的問題和錯誤信息。用“空字符串”("")附加到來自Name數據庫項的值。空字符串與Null連接在一起,結果是空字符串;而空字符串跟有效字符串連接在一起,結果還是這個字符串,所以這是一個雙贏的解決辦法:若這個值是NULL,那就修復了;如果不是NULL,則保持原樣。
為什么要用Set <variable> = Nothing銷毀一個對象 在您真正用到對象時您就會知道其中的好處,因為銷毀對象實際上就是釋放對象所占用的內存。對象占用的內存要比普通變量大得多。所以保留不必要的對象可能導致致命的內存錯誤,其中的原因過于復雜,在此不做深究。應該養成所有的對象在用完后立即將其設為Nothing的好習慣。
ReDim Preserve可更改數組的維度與大小 ReDim Preserve astrPhoneList(2,1)
astrPhoneList(0, 1) = "Carter"
astrPhoneList(1, 1) = "Ron"
astrPhoneList(2, 1) = "305-555-2514"
ReDim Preserve astrPhoneList(2,2)
astrPhoneList(0, 2) = "Davis"
astrPhoneList(1, 2) = "Miles"
astrPhoneList(2, 2) = "212-555-5314" 使用Preserve關鍵字,只能改變數組最后一個維度的大小。如果試圖改變其他維度的大小,而不是最后一個維度,VBScript會生成一個運行時錯誤。這就是為什么在使用二維數組時,最好將第一維視為列,第二維視為行。在設計時,您通常會知道數組中會有多少列,因此大多數情況下都不會去改變列數。
UBound可返回數組行數或列數 UBound(astray, 2)返回行數,意思是第二個維度 UBound(astray, 1)返回列數,即第一個維度。
關于調用函數的規則 msg=MsgBox("請確認您輸入的數據是否正確!",&H123,"數據檢查") 或 MsgBox "請確認您輸入的數據是否正確!",&H123,"數據檢查" 或 Call MsgBox("請確認您輸入的數據是否正確!",&H123,"數據檢查")
關于Exit Sub和Exit Function 這里沒有使用Exit Sub,而是用了Else語句。這里的設計原則就是過程只能有一個退出點,這就是過程結尾的隱藏退出點。從定義就能看出,有Exit語句的過程或函數必然有多個退出點,很多程序員都認為這是糟糕的設計。這個原則的出發點就在于多個退出點更易于產生錯誤而且難于理解。 不要太擔心您的代碼是否符合某些理想的設計——尤其是在這樣小規模的簡單腳本中。更重要的考慮是Exit Sub和Exit Function的使用會破壞腳本的邏輯流程。因為它們是用于終止邏輯流程,并且會在代碼中產生跳躍,過度地使用會導致邏輯混亂,容易產生錯誤。這就是為什么有些人反對使用這些語句的原因。
關于傳址與傳值 Sub ByRefByValExample(ByRef lngFirst, ByVal lngSecond) lngFirst = lngFirst + 1 lngSecond = lngSecond + 1 End Sub 執行這過程后,lngA的值會發生改變,lngB不會。 我想,這就是傳址與傳值。過程 不會有返回值,如果想要改變什么,便只好改變地址了。
文字常量和具名常量 "Hello",#08/31/69#,true,這些是文字常量 具名常量類似于變量,它也是內存中存放數據的地址的名稱。不同之處在于,顧名思義,它是一個常量,在運行時不能修改。 用Const語句定義常量。 Const GREETING ="Hello there, " Const語句定義了名為GREETING的具名常量。常量的名稱全部大寫,這是一種廣泛接受的具名常量命名方式。將常量名稱定義為全大寫就更容易將其與變量區分開,變量通常都是小寫的或大小寫混合的。另外,因為常量通常全都是大寫字母,常量名稱中的不同單詞是以下劃線(_)分割的,例如Const RESPONSE_YES = "YES" Const?RESPONSE_NO = "NO"? 具名常量的使用原則: 1:如果某個文字常量只需使用一次,就無需為其創建具名變量。 2:如果使用具名常量代替文字常量可以使代碼更清晰,那就使用具名變量。 在使用數字和日期文字常量時尤其要遵守具名常量原則2。 在使用數組時,用具名常量代替數組下標也是個不錯的做法。
Select Case …End Select
For lngIndex = -10 To -20 Step -2 Exit For '終止循環 Next
查找字符串中包含字符串 strFullPath = "C:\MyStuff\Documents\Personal\resume.doc"
strFileName = Right(strFullPath,Len(strFullPath) - InStrRev(strFullPath,"\"))
MsgBox "The filename is: " & strFileName
For Each…Next最常見于遍歷集合,但它還可以用于遍歷數組中的元素。 無論數組中有多少元素,也無論它有多少個維度,For Each…Next循環都能遍歷其中的每個元素。這個例子就是用For Each…Next循環遍歷一個一維數組: astrColors=array("Red", "Green", "Blue", "Yellow")
For Each strElement In astrColors
??? MsgBox strElement
Next
Exit Do與Exit For 在執行Exit Do語句時,代碼會跳出循環,跳到循環代碼塊的下一行。
On Error Resume Next 如果要將錯誤控制開關調到OFF狀態,可以在腳本開頭使用On Error Resume Next語句 On Error GoTo 0再將錯誤報告開啟
With...End With With關鍵字是一個可以減少打字次數的快捷方式。當您在一塊代碼中多次使用同一個對象時,可以將這段代碼放到With...End With結構中。
Scripting.Dictionary 這很像數組吶,一個字符串,對應一個什么東西 Add方法 strItemAdd(LAST, 0) = "Shorter" ? ? ?strItemAdd(FIRST, 0) = "Wayne"
? ? ?strItemAdd(PHONE, 0) = "853-238-0060"
? ? ?strKey = strItemAdd(PHONE, 0)
? ? ?dicPhoneList.Add strKey, strItemAdd CompareMode 屬性 1(vbTextCompare)是進行文本比較,0(vbDatabaseCompare)是進行二進制比較。 比方說區分大小寫,使用vbTextCompare時,已有abc時添加ABC即會生成錯誤。 Item屬性 dicAnimals.Item("1234") = "Cat" strAnimalName =?dicAnimals.Item("1234")? Exists方法 Exists()方法可以用于檢查字典中是否已經存在某個關鍵字。實例: If?dicAnimals.Exists("1234")? Then strAnimalName =?dicAnimals.Item("1234")? End If Remove方法 與Add對應 RemoveAll方法 清空數據
Class Property Let? ? ? ?Property Get?
? ? ?Property Set?
正則表達式 Set re = New RegExp Global屬性負責指明模式是匹配整個字符串中所有與之相符的地方還是只匹配第一次出現的地方。如果Global屬性的值是True,那就會對整個字符串進行查找;否則就不會。默認值是False。 re.Global = True?
如果IgnoreCase屬性的值為False,搜索為大小寫敏感;如果是True,則不是。默認是False re.IgnoreCase = True
Pattern屬性設置或返回用于搜索的正則表達式 re.Pattern = "\bin"
Execute方法將正則表達式應用到字符串上并返回Matches集合。 也就是說,Execute會返回匹配到的字符串,的集合。 要記得將Global屬性設為True,否則您的Matches集合中最多也只會有一個成員。這種方法很簡單,但是很難調試! Set colMatches = re.Execute(s) For Each match In colMatches MsgBox "Found valid URL: " & match.Value Next
Replace方法用于替換在正則表達式搜索中找到的文本,object.Replace(string1, string2) Replace方法返回一份RegExp.Pattern被string2替換后的string1的副本。
Backreferencing 存放匹配結果的緩存從1開始編號,最大可以到99,可以一次用$1、$2之類的變量訪問它們。 本實例,前5個單詞(由一個或多個非空白字符組成)會被記住,然后只有其中的4個會出現在替換文本中: Dim re, s
Set re = New RegExp
re.Pattern = "(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)"
s = "VBScript is not very cool."
MsgBox re.Replace(s, "$1 $2 $4 $5") 本代碼會輸出“VBScript is very cool.”。 注:在正則表達式字符中用括號,然后即可用$匹配相應的位置
Test方法對字符串執行正則表達式搜索,并返回一個布爾值說明匹配是否成功 object.Test(string) 如果匹配成功,Test方法返回True;否則返回False。這適用于判斷字符串是否含有某個模式。注意,常常需要先將模式設為大小寫敏感。 用這個方法可以驗證輸入
Matches的屬性 1.Count返回集合中的元素數量。 Set colMatches = re.Execute(s) MsgBox colMatches.count 2.Item根據指定的鍵返回元素。 Msgbox colMatches.item(0) Msgbox colMatches.item(1)
Msgbox colMatches.item(2)
Match對象是Matches集合中的成員 1.FirstIndex屬性從0開始對被搜索的字符串編號。換句話說就是字符串中的第一個字符就是字符0。 For Each objMatch in colMatches sMsg = sMsg & ", found at position " & objMatch.FirstIndex & "of the string." Next 2.Length屬性返回在字符串中找到的匹配的長度 sMsg = sMsg& "The length matched is " & objMatch.Length & "." & vbCrLf 3.Value屬性返回在字符串中找到的匹配結果的值或文本。 sMsg = sMg &"Match of " & objMatch.Value
正則表達式字符 請查看 VBScript正則表達式字符 筆記 + 匹配前面的字符一次或多次 * ?匹配前面的字符零次或多次 ? ?匹配前面的字符零次或一次
cscript 之所以有兩個宿主程序,是因為cscript.exe被設計為從控制臺窗口啟動(一般來說是Windows中的MS-DOS窗口),而wscript.exe則用于直接與Windows GUI進行交互。這兩者就功能來講幾乎沒有區別。 cscript c:\folderName\YourScriptName.vbs
總結
以上是生活随笔為你收集整理的读《VBScript程序员参考手册》,做的笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iSAM2 笔记
- 下一篇: 渐进式复杂度分析-学习笔记