VBS或VBE由淺入深兩種方案.doc
《VBS或VBE由淺入深兩種方案.doc》由會員分享,可在線閱讀,更多相關《VBS或VBE由淺入深兩種方案.doc(47頁珍藏版)》請在裝配圖網上搜索。
VBS由淺入深兩種方案 以下所整理的是本人學習VBS時,根據經驗將所用的教程進行了歸納。分兩篇,第一篇,是某專業(yè)人士所整理的通俗易懂的學習方案,甚至沒學過任何程序語言的人也可以輕松掌握;第二篇則是另一專業(yè)人士所整理的比較正式的學習方案。 本人建議同學們可以先看第一篇,有較好的語言功底的人可直接看第二篇。 當然,我有必要說一下VBS與VBE的區(qū)別: VBE跟VBS差不多,都是VB腳本代碼文件,但他們也有不同: VBS是明文代碼,就是說可以直接使用記事本編輯; VBE則是編譯后(加密)的VBS代碼,使用記事本打開不能直接看到源代碼。(有些例外) 加密工具有很多,其中常用的是 Microsoft Script Encoder(screnc.exe),此外還有許多。 VBE格式在QQ傳文件中往往不會被攔截,而VBS格式卻會被攔截,這應該是程序設計者的一個失誤。 因此,所以很多人沒有進行加密而直接改擴展名為“VBE”,依然能夠運行,只是為了方便一下。 最后祝大家學習愉快! 腳本真的很好玩! 第一篇 VBS的基礎教程 第一篇(共六篇) 我知道菜鳥現在最關心的就是用什么工具來開發(fā)VBS程序了, 答案是:記事本(Notepad),我不是開玩笑, 其實任何一種文本編輯器都可以用來開發(fā)VBS開發(fā), 只不過記事本是由系統(tǒng)自帶的, 比較好找而已. 盡管如此, 我還是建議你去下載一個專業(yè)的文本編輯器, 因為這些工具可以提供 "語法高亮"等功能, 更加方便開發(fā), 用哪一個隨你喜好, 我比較喜歡Edit Plus,ScriptCryptor也不錯 OK, 我們先來寫一個VBScript程序熱熱身. REM 輸入并回顯你的名字 使用InputBox和Msgbox函數 ?。ㄉ厦婕氨拘锌梢圆槐貙懭朐创a中,下面才是運行的代碼) Dim name,msg msg="請輸入你的名字:" name=Inputbox(msg) Msgbox name 把上面的程序清單輸入到記事本里面, 然后保存為以.vbs為擴展名的文件(如果在文件名上沒有“.***”,就打開控制面板-文件夾選項-查看-取消隱藏已知文件類型的擴展名).然后雙擊, 觀察運行結果. 注意:為了使你學得更好,推薦自己輸入程序清單, 盡量不要復制->粘貼 我來解釋一下這個程序, 第一行和第二行的開頭分別是"REM"語句和" ", 這兩個東西的作用是相同的, 表示之后的文字是注釋, 就是說符號后的什么也不干,只是用來說明這段程序的功能, 版權信息等等. 注釋行是程序最重要的部分之一, 盡管它不是必需的, 但對于其他人閱讀源代碼, 以及自己分析源代碼是很有好處的. 好的習慣是在必要的地方加上清晰, 簡潔的注釋. Dim用來聲明一個變量, 在VBS中, 變量類型并不是那么重要, 就是說VBS會幫你自動識別變量類型, 而且變量在使用前不一定要先聲明, 程序會動態(tài)分配變量空間. 在VBS中你不用考慮name儲存的是一個整數還是一個小數(學名叫"浮點數"), 也不用考慮是不是字符串(一串字符, 比如:"Hello World"), VBS會自動幫你搞定. 所以第三行語句可以刪除, 效果不會變, 但我強烈反對這么做, 一個變量的基本原則就是:先聲明,后使用.變量名用字母開頭,可以使用下劃線,數字, 但不能使用vbs已經定義的字, 比如dim, 也不能是純數字. 下一行被稱之為"賦值", "="是賦值符號, 并不是數學中的等于號, 盡管看起來一樣.這是正統(tǒng)的理解, 你要理解成等于也沒有什么不可. 賦值號的左邊是一個變量, 右邊是要賦給變量的值, 經過賦值以后, msg這個變量在程序中等同于"請輸入你的名字:"這個字符串,但當msg被再次賦值的時候, 原值就會消失. 不光字符串, 其他任何變量都這樣被賦值, 例如: a=2, b=12.222等等. 再往下,Inputbox和Msgbox是VBS內建的函數, 一個函數就相當于一個"黑箱", 有輸入(參數)和輸出(返回)值, 你可以不用了解函數是怎么運作的, 只要了解這個函數能干什么就行了, 我們也可以定義自己的函數, 不過那要等到以后再講. 現在我們只要了解, 一個函數可以有返回值也可以沒有, 可以有參數也可以沒有. 例如Inputbox就是有返回值的函數, 我們用賦值號左邊的變量來"接"住InputBox的返回值--就是你輸入的內容. 在inputbox右邊的括號里是參數列表, 每個參數用","分隔開, 每個參數有不同的功效, 比如第一個參數會顯示在提示里, 我們把msg這個變量作為第一個參數傳給了Inputbox 函數, 而msg="請輸入你的名字:", 所以我們在對話框的提示欄就會看到"請輸入你的名字:" 第二個參數是對話框的標題, 我們用直接量(學名叫"常量", 這里是"字符串常量")傳遞給函數, 當然你也可以傳遞變量. Inputbox還有很多參數, 比如你在"名稱"后面再加一個","然后輸入隨便一串字符(字符串,用雙引號""包裹起來的一串字符叫做字符串)然后運行, 看看結果. 你會發(fā)現用于輸入的文本框有了默認的值, 這就是第三個參數的作用. Msgbox函數是用來輸出的函數, 在VBS中沒有專門的輸出函數(BASIC中的print,C中的printf), 所以我們只能用對話框來觀察輸出結果, Msgbox的必要參數只有一個, 就是要輸出的內容, 在這種情況下, 我們不需要理會msgbox的返回值. 關于Msgbox和Inputbox我們以后還會在討論, 今天只是熱熱身, 到此為止. 要點: 1) 注釋(以REM或開頭)行在程序中不起作用, 但能讓別人更容易讀懂你的程序. 2) 變量好像一個盒子, 或一個代號, 可以代表你想代表的東西. 變量賦值使用"=" 3) 以""包裹起來的字符稱之為"字符串" 4) 函數像一個"黑箱", 有參數和返回值, 用"="左邊的變量可以接住返回值 5) Inputbox函數彈出一個輸入對話框,Msgbox則用于輸出 作業(yè): 1) 試驗Inputbox的第三個參數 2) 寫一段程序輸出你的年齡 3) 寫一段程序進行3次輸入, 分別輸入你和你父母的姓名(要求顯示提示), 并分3次輸出 第二篇(共六篇) 我真沒想到, 第一次的作業(yè)竟然有人不會.看來要講的非常非常細致才行, 嗯, 今天講各種"量"和基本運算 先說常量, 這個比較簡單. 什么是常量呢, 常量就是其值不可變化的量. 常量分為兩種:第一種, 自然常量. 這叫是因為它們本身就是常量, 你怎么更改21的值呢? 他永遠都是21, 不可能變成46 如果你在程序中使用"21=46", 這樣的語句將會引發(fā)一個錯誤. 同樣的, 字符串也是常量 (還記得字符串嗎? 就是包裹在""之間的一串字符), "Hello World"就是一個例子, 如果你使用"Hello World"="Bye"這樣的語句同樣會引發(fā)一個錯誤. 你能舉出自然常量的更多例子嗎? 第二種, 是我們自己定義的常量,這種量也使用代號, 它們也被賦值, 但和變量的不同點在于, 他們在定義的時候被賦值,以后就不能改變了,如果企圖改變將會引發(fā)一個錯誤. 定義一個常量,我們使用"const"這個關鍵字(關鍵字的意思是系統(tǒng)定義了有特殊功能的字, 不能作為變量名或常量名使用) 格式是:const 常量名=常量值. 例如: const PI=3.1415926 const NAME="記憶碎片" 這樣我們就定義了兩個常量, PI和NAME, 一般說來, 常量名全部使用大寫, 但也可以不用, 隨你喜好. 將一些在程序中不需要改變的值定義為常量是個好習慣, 這樣能防止不必要的意外. 另外, 使用自定義常量也可以減少你的工作量. 比如: msgbox "Hello World" msgbox "Hello World" msgbox "Hello World" msgbox "Hello World" msgbox "Hello World" 這個程序輸出五次Hello World, 如果你想要改變輸出為Bye-Bye, 就必須修改全部程序, 當然你可以手動修改5次, 但如果你要輸出1000次呢? 常量就可以替我們解決這個問題: const hw="Hello World" msgbox hw msgbox hw msgbox hw msgbox hw msgbox hw 這樣當你要修改輸出的時候只要修改hw的值就行了. 好了, 現在我們來看看編程的第一塊重要"基石":變量. 解釋變量最好的辦法我覺得是"盒子", 一個變量好像一個盒子, 里面只能裝一個東西, 當你要裝進去別的東西的時候必須把原有的東西拿出來. 這個"盒子"是有名稱的, 當你在程序中使用變量的時候, 系統(tǒng)會打開盒子取出里面的東西, 讓這些東西參與處理, 而不是盒子. 有些語言是很依賴"盒子"里面裝些什么東西, 這樣才能找到合適的"盒子"(比如C語言), 但VBS給我提供的是能夠自動伸縮的"魔術盒", 我們不用關心裝進去的是什么東西, VBS會自動調整盒子的大小. 例如: Dim a1,a2,a3 a1=14 a2=12.23 a3="Hello" 而不用像C語言那樣麻煩: 或者是VB的正規(guī)聲明(VB可以聲明也可以不用)那樣: int a1; Dim a1 as integer float a2; Dim a2 as Double char* a3; Dim a3 as string a1=14; a1=14 a2=12.23; a2=12.23 a3="Hello"; a3="Hello" 嗯……扯遠了…… 變量有什么用呢? 哇, 那用處可大了. 最簡單, 你并不能確定程序運行時變量的值, 比如前一節(jié)課我們編的輸入姓名的程序, 你不能確定InputBox返回的是什么(還記得Inputbox的返回值嗎? 就是你輸入的內容), 所以你就沒有辦法應對各種情況, 但我們用name這個"盒子"把用戶的名字裝起來, 到用的時候我們只要知道name這個盒子的名字就行了, 系統(tǒng)會自己打開它并把里面的內容拿出來用. 再舉個例子, 我們編寫一個程序計算一個矩形的面積, 比如這個程序要發(fā)給小學生使用: dim a,b,s a=15 b=12 s=a*b msgbox s 這樣就可以求出長為15,寬為12的矩形的面積了, 是不是很簡單? 當然, 這個程序也可以這樣寫: dim s s=15*12 msgbox s 這樣看起來程序短了許多, 也節(jié)約內存, 但兩種都不是鼓勵的做法, 為什么? 請看下面. 現在, 我們的程序要變得像點樣子才行, 誰的程序寫出來還要別人修改源代碼才能用啊? 所以, 我們要接受用戶的輸入, 還記得嗎? InputBox函數. 修改后程序如下: dim a,b,s a=inputbox("請輸入矩形的長:") b=inputbox("請輸入矩形的寬:") s=a*b msgbox s ok, 這么一修改, 無論用戶輸入怎樣的數據, 我們都能計算出矩形的面積了. 如果你用s=15*12能改嗎? 當然不行. 我想你已經發(fā)現了, vbs中的數學計算和真正的算術沒有什么不同, +,-,*,/,(),[],{}都是一樣的用法, 比如: dim ans ans=12+32/4+[(23-10)*2] msgbox ans 四則運算的法則在編程中同樣生效, 你可以在編程中重新獲得小學時候的樂趣(你恨數學?那就別學電腦了). 在編程中有一個有趣的運算符是"mod", 這個運算符叫做"取余運算符", 就是取得一次除法的余數, 例如 dim a a=16 mod 5 你知道a等于幾嗎? Bingo! 沒錯, 就是1. 因為16 / 5 =3....1, 所以mod計算的結果就是1. 還有一個運算符是"^"(就是鍵盤"6"上面的小箭頭), 他表示"乘冪"(或者是"方") 比如: dim a,b,c a=2 b=a^2 c=a^3 msgbox b msgbox c 則b=a*a=4, c=a*a*a=8 好了,我們一次不要講太多, 這次就講到這里, 現在總結一下. 要點: 1) 常量分為自然常量和自定義常量, 常量的值不可修改 2) 變量就像盒子, 我們不在乎盒子里裝的是什么, 但一定要知道盒子的名字 3) 四則運算在編程中沒有任何不同 4) MOD是取余運算 作業(yè): 1) 編一個程序, 計算圓形的面積, 半徑由用戶給出 (使用Inputbox) PI取值3.14159 2) 編一個程序取得20 / 3 的余數 第三篇(共六篇) 首先, 我來解決一下上次課程的幾個疑問 第一, 那個余數問題, 16 / 5 = 3……1, 是因為我改過前面的部分, 后面的忘了改了, 不好意思. 第二, 請看一下程序清單: ?。?) Dim a,b,c a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") c=a*2+b*2 msgbox c 這個 輸入1、2時是6 ?。?) Dim a,b,c a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") c=(a+b)*2 msgbox c 這個輸入1、2時是24 為什么會不一樣呢? 在數學上c=(a+b)*2 和 c=a*2+b*2是等價的, 在VBS中也是如此. 問題出在"+"上, 在VBS中, +不僅僅是加號的意思還表示把兩個字符串連接起來, 例如"Hello"+"World"="HelloWorld" ,have you understood? 你還記得InoutBox函數的返回值嗎? 是字符串! 這就看出問題了吧, 在編程中"1"不等于(<>)1, "1"是一個字符, 而1是一個數, 所以a,b都是字符串變量, "1"+"2"="12", 這就好像我們小時跟伙伴開玩笑問他們1+1=?一樣, 我們總是笑著說"錯啦,應該是11".但為什么, a可以*2卻不發(fā)生錯誤呢? 這時VBS比較智能的一個表現, 如果這個字符串的內容是一個數且對他進行數學運算, 則把字符串強制轉換成數參與運算, 如果字符串代表一個數, 但不參加數學運算, 而是參加字符串運算(合并)則當作字符串處理, 所以你看到a+b=12, 這時候a+b的結果(12)是一個字符串, 當它要乘以2的時候就被強制轉換成了數字12, 這樣我就得到了結果24. 怎么修改這個程序呢? 我們需要用到另一個內建的函數:int, int函數的功能是將輸入值轉化成整數值, 我們這樣修改: c=(int(a)+int(b))*2 這個意思就是把a作為參數傳遞給int函數, int函數就會返回那個整數(你的輸入值), 然后讓返回值參與運算, 這樣就得到了正確答案.所以,以后如果你用的是inputbox函數的話,最好用int語句加工一下:比如c=int(c) c是你自己的變量 另外,還有一個函數:CDbl。如果你想把字符轉換為數字,但又不取整時就用這個: Dim a,b,c,d,e a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") c=CDbl(a) d=CDbl(b) e=(c+d)*2 msgbox e 你輸入1.2,1.3時就會輸出5。 上面的實例也可以綜合寫成: Dim a,b a=CDbl(inputbox("a是:","輸入半徑")) b=CDbl(Inputbox("b是:","輸入半徑")) Msgbox (a+b)*2 這樣輸入1.2,1.3時依然就得出5。不過這樣寫比較適合學習過一段時間VBS的朋友. 大家是不是覺得這個課程有點枯燥?呵呵, 變量和運算符部分的確是這樣的, 不過多多練習也就好了, 這次, 我們寫寫真正好玩的東西: 流程控制語句. 這個部分開始才是真正的編程. 首先介紹判斷結構. 在此之前, 我們先介紹一種簡單的變量類型:布爾值(Boolean), 這種變量只有兩個可能值:True,Flase,即真或假. 這種變量在某些情況下很有用(比如"開關"). 我們定義一個Boolean變量的方法和其他變量一樣, 賦值也一樣, 例如: dim a,b a=true b=false 注意,true和"true"(加雙引號)是不一樣的, "true"是字符串,true是布爾值, 千萬不能混淆. 回到if語句上來, 我們先來看看簡化版的if語句:if 判斷式 then 語句體 我們來看一個例子: dim a,b a=12 b=13 if b>a then msgbox "B大于A" 我們只看最后一行, a>b這個式子(表達式)有一個返回值, 是Boolean型的. 因為這個式子只有兩種可能:b大于a, b不大于a, 所以這個式子也只有兩種可能性, 即真或者假. if語句判斷這個表達式的返回值是真還是假, 如果是真(true)則執(zhí)行then后面的語句, 如果是假, 則不執(zhí)行, 你把a的值改成14看看還會不會彈出對話框? 當我們要在判斷之后執(zhí)行多行語句怎么辦呢, 我們需要用語句塊來解決, 在這里可以叫塊if dim a,b a=12 b=13 if a鍵)個格, 這不是必需的, 但是是一個好習慣, 以便看清楚程序的結構. 這樣我們就能運行多于一個的語句, 請注意if...then...end if 這三個關鍵部分不要掉了. OK, 我出一個題, 輸入一個數, 如果小于100就輸出"錯誤", 如果大于100就輸出"正確", 我這里有兩個程序版本: dim a a=inputbox("請輸入一個大于100的數") a=int(a) inputbox返回的是字符串, 我們把他變成整數 : ) if a>100 then msgbox "正確" if a<100 then msgbox "錯誤" 還有一個更簡單的 dim a a=inputbox("請輸入一個大于100的數") a=int(a) inputbox返回的是字符串, 我們把他變成整數 if a>100 then msgbox "正確" else msgbox "錯誤" end if 看到多了一個else了吧, else的作用就是當要判斷的表達式為false時執(zhí)行的. 這樣程序就可以處理兩種不同的情況了. 不要忘了用end if結尾 嘿嘿, 我是“變態(tài)者”, 現在我要你處理三種情況, <100,=100,>100, 還要寫在一個if結構里, 你怎么辦, 我給你答案: dim a a=inputbox("請輸入一個大于100的數") a=int(a) inputbox返回的是字符串, 我們把他變成整數 if a>100 then msgbox "正確" elseif a=100 then msgbox "老大, 你耍我?" else msgbox "錯誤" end if 這次輸入100看看, 是什么? else if語句可以在if結構中多次出現, 以靈活判斷不同的情況 (如果你要判斷得太多, 就請使用"選擇結構", 過會兒就講), 當所有elseif都處理完了,而沒有符合情況的時候再執(zhí)行else中的語句.另一個例子: Dim a,b,c,d a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") d=Inputbox("答案:","輸入答案") c=a*2+b*2 這里沒有問題, 會自動轉換 if d=c then msgbox "你好聰明" else msgbox "你好豬頭 自己的題還不會!" end if 哈哈, 無論你回答得多么正確你都是豬頭, 不是我耍你, 還是文章開始時候的inputbox的返回類型在耍你, d是inputbox的返回值, 他是一個字符串, 而c是一次整數計算的結果, 他是一個整數. 一個字符串無論如何也不等于一個整數, 盡管他們字面上是一樣的:"8"<>(不等于號)8 所以if的判斷式的值永遠是false, 總是執(zhí)行else部分的語句. 我們可以這么修改 Dim a,b,c,d a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") d=Inputbox("答案:","輸入答案") d=int(d) 在這里我們取出了d的值, 變成整數, 再放回"d"這個盒子里 c=a*2+b*2 if d=c then msgbox "你好聰明" else msgbox "你好豬頭 自己的題還不會!" end if 這樣就成功了. 這也是Inputbox函數的一個討厭的地方, 沒辦法, vbs沒有其他好的輸入方式了. 說到if, 我們不得不說一說邏輯運算符, 今天介紹兩種, "and" 和 "or" 學會了if語句之后, 我舉一個例子, 你一看就明白了. dim a,b a=inputbox("輸入一個數 >10") b=inputbox("輸入另一個數 >10") a=int(a) b=int(b) if a>10 and b>10 then msgbox "正確" else msgbox "錯誤" end if 這段程序讓你輸入兩個值, 必須都大于10, 只要有一個不大于, 就輸出錯誤 dim a,b a=inputbox("輸入一個數 >10") b=inputbox("輸入另一個數 >10") a=int(a) b=int(b) if a>10 or b>10 then msgbox "正確" else msgbox "錯誤" end if 這段程序讓你輸入兩個值, 只要有一個大于10, 就返回成功. 其實and和or很好理解, 我讀"if a>10 or b>10 then" 這一句, 用華語是這樣:"如果a大于10或者b大于10, 那么...". 這樣是不是就很好理解了呢. OK, 我們再來看一種新結構,,學完這個,今天的課就結束, 已經午夜了, 我都累死了. 當你的程序要處理很多種不同的判斷情況的時候elseif..then會讓程序看起來很雜亂, 所以就有了一種select case結構專門對付這種情況, select case的語法結構很簡單: select case 變量名 case 值 語句 case 值 語句 case else 語句 end select 我們舉個例子就能很簡單的說明: dim a a=inputbox("輸入一個1--3的值") a=int(a) 處理inputbox返回字符串的問題 select case a case 1 msgbox "壹" case 2 msgbox "貳" case 3 msgbox "叁" case else msgbox "輸入錯誤" end select 這個例子把1,2,3這三個阿拉伯數字轉化成中國大寫數字, 這個程序寫成if...elseif 的形式如下 dim a a=inputbox("請輸入1--3的值") a=int(a) if a=1 then msgbox "壹" elseif a=2 then msgbox "貳" elseif a=3 then msgbox "叁" else msgbox "輸入錯誤" end if 怎么樣, 麻煩吧, 還是select好吧. OK, 今天到此結束, 總結一下: 要點: 1) inputbox返回的是一個字符串, 而不是一個數, 必須用a=int(a)這種形式轉化成數 2) bool變量的值只有兩種:true,false 2.5) and兩邊的表達式都是true, 則返回true. or兩邊的表達式有一個是true, 就返回true 3) if 語句的格式 4) select...case的格式 作業(yè): 1) 使用3個bool值, 儲存你的3兄弟姐妹是否是男性 (提示:sister1male=false) 2) 給定一個個數, 大于10而且小于20輸出"正確", 否則輸出"錯誤" 3) 輸入12,或者15, 輸出"正確", 否則輸出"錯誤" 4) 把5以內的正整數都轉換成中國大些數字 5) 自己隨便設計一個程序, 應用今天的知識 第四篇(共六篇) 大家好,今天寫第4章:循環(huán)結構 我們先來看一道題:商場進行每日結算, 要求累加出今天的營業(yè)額, 每次輸入一個數, 這道題其實很簡單, 但就我們現在學過的知識要完成這道題相當麻煩, 我們來分析一下. 首先, 我們需要知道買賣的次數, 這樣才能控制輸入的次數,但是, 這種設計是非常低效的, 每天都要重新設計程序. 假定今天進行了5次交易, 以下是源程序: dim sum sum=0 初始化變量 sum=sum + int(inputbox("請輸入交易額")) sum=sum+x 這種形式是把本身的值取出來, 進行一次運算, 再放回本身, 這種方法很有用處 這里使用了函數嵌套, 把inputbox的返回值直接傳給int函數, 轉化成整數, 下同 sum=sum + int(inputbox("請輸入交易額")) sum=sum + int(inputbox("請輸入交易額")) sum=sum + int(inputbox("請輸入交易額")) sum=sum + int(inputbox("請輸入交易額")) msgbox sum 看到了嗎, 我通過把計算過程復制了5遍才設計好了程序, 這種程序在汽車交易所等交易次數少的地方還能湊合著用, 如果放到超市豈不是要復制, 粘貼幾千遍? 我們今天講的內容就可以克服這種缺陷, 首先, 我們來講以下Do...Loop語句. do...loop的結構看上去非常簡單, 就是:do...loop, 僅此而已, 這個結構不斷執(zhí)行do和loop之間的語句(學名叫:循環(huán)體), 永不停止. 舉個例子來說: do msgbox "這個信息會不斷重復出現, 要停止程序請使用任務管理器(Ctrl+Alt+Del)中止wscript進程" loop 運行這個程序, 當你點銷掉一個對話框馬上會出來另一個, 你永遠點不完, 總有下一個. 誰會運行這樣的程序? 除非是給別人搗亂(我就干過這種事), 所以在do..loop結構中還有一個語句:exit do, 這個語句將終止循環(huán), 跳到loop后面的語句繼續(xù)執(zhí)行.舉個例子來說: dim a 注意:常量不需要在dim里面聲明,否則會引發(fā)錯誤 const pass="123456" 這是一個字符串 請用""包裹起來. 設定密碼為常量, 不可變更 do a=inputbox("請輸入密碼") if a=pass then msgbox "密碼校驗成功" exit do end if loop 這個程序會一直不停的問你密碼, 知道你輸入了正確的密碼為止.(if可以嵌套在另一個if當中, 也可以嵌套在循環(huán)體當中, 所以一定要用縮進, 來分清楚程序的各個部分). 這個程序是很經典的, 早期的程序都是這么做的. 但是我們是Hacker, 所以我們了解系統(tǒng)的安全性, 這種無限次認證程序很容易被窮舉破解, 我們要來限定認證的次數. 修改程序如下 dim a,ctr ctr=0 設置計數器 const pass="pas123_" 上面的那個是弱密碼, 這次改的強一點 do a=inputbox("請輸入密碼") if a=pass then msgbox "認證成功" exit do else if ctr=3 then msgbox "已經達到認證上限, 認證程序關閉" exit do else ctr=ctr+1 msgbox "認證出錯, 請檢查密碼" end if end if loop 運行這個程序試試看, 當你出了3次錯誤以后, 就會停止再次詢問密碼, 關閉程序. telnet認證用來限制次數的程序與此大同小異. 要注意的是嵌套的if語句, 請仔細讀一下這個程序, 可能比較難懂, 也請你試著自己設計一下類似的程序. 其實, 要在do...loop加上驗證的功能, 并不一定要用if, 我們可以直接利用do. 我來介紹一下while關鍵字, while可以放在do或者是loop后面, 然后再接一個表達式, 當表達式的值為true的時候(表達式成立),才運行循環(huán)體.我們來看一下修改后的 程序" dim a,ctr ctr=0 const pass="pas123_" do while ctr<3 a=inputbox("請輸入密碼") if a=pass then msgbox "認證成功" msgbox "(你可以在這里加一段成功后得到的信息)" exit do else ctr=ctr+1 如果密碼出錯就增加一次錯誤認證計數 msgbox "認證出錯, 請檢查密碼" end if loop 這樣實現的功能和上一個例子完全一樣, 我們再來看看把while放在loop后面: dim a,ctr ctr=0 const pass="pas123_" do a=inputbox("請輸入密碼") if a=pass then msgbox "認證成功" msgbox "(你可以在這里加一段成功后得到的信息)" exit do else ctr=ctr+1 如果密碼出錯就增加一次錯誤認證計數 msgbox "認證出錯, 請檢查密碼" end if loop while ctr<3 功能是一樣的, 為什么要放在loop后面呢? 你把ctr的值改成3就知道了, while在do后面的程序會直接退出, 而在loop后面還會允許一次認證, 到了loop才結束.和while相反的是until, 用法和while一樣, 不過他只有當后面的表達式的值為false(表達式不成立)的時候才執(zhí)行循環(huán)體, 請自己試驗一下 ok, 我們來看另外一種循環(huán)結構,for....next, 這種循環(huán)結構是基于計數的, 也是在編程中最常見到的循環(huán)結構. dim i for i=0 to 5 msgbox i next 看到了嗎?每次輸出的i都是遞增的, 但我們沒有明確指出i要遞增, 當i達到5的時候, 循環(huán)就結束了, 因為由0開始, 所以循環(huán)體執(zhí)行了6次, 這一點很重要, 大部分東西都是從0開始而不是1. 這個程序也可以寫成 do的形式: dim i i=0 do while i<5 msgbox i i=i+1 因為do不能自動計數, 必須手動加 loop 怎么樣, 還是for比較好用吧. for在編程中很有用途, 我們再舉一個例子, 順便講一下嵌套循環(huán). dim i,j for i=1 to 9 for j=1 to 9 str=str & i * j & " " &是和并字符串的符號 next 每個next對應一個for next msgbox str (這樣出現的結果是一次性的,如果你需要依次出現把msgbox str)提前到next之前 看看運行結果, 是否令你會想起小學時代的數學老師(丑陋的嘴臉). 要注意, 這里有一個"大"的for, 和一個小的for, 當小的for執(zhí)行完一個周期以后, 大的for才執(zhí)行一次(換句話說, 大的for執(zhí)行一次, 小的要執(zhí)行9次), 所以一共執(zhí)行了九九八十一次. 在大的for里可以不僅僅是一個小的for, 也可以加上另外的語句. 我們來修改一下源程序: dim i,j for i=1 to 9 for j=1 to 9 str=str & i * j & " " next 每個next對應一個for str=str & vbCrlf vbCrlf相當于鍵盤上的回車鍵,因為你不能在鍵盤上輸入,所以系統(tǒng)定義了一個默認的常量 next msgbox str 這次運行完成以后, 輸出結果按照乘數進行了分割, 每小for運行完一次, 就換一行(通過vbcrlf). 這次的內容對菜鳥可能比較難懂, 掌握的辦法只有一個:多實踐. 另外, 我在論壇看到很多人還問:"VBScript要用什么工具編?"我就很氣憤, 我在第一篇里面已經說明:用記事本編輯源代碼, 然后保存為以.vbs為擴展名的程序就可以了, 請大家不要用其他工具編寫,否則很容易引起錯誤. 再問. 另外, 國產的一種垃圾軟件"超級X霸"搶占了vbs這個擴展名, 請把那個垃圾卸載掉. 我們總結一下: 要點: 1) do..loop和exit do的用法 2) while當表達式true的時候執(zhí)行循環(huán)體,until反之 3) for...next是計數循環(huán), 每次執(zhí)行計數器遞加 4) 嵌套循環(huán)的作用和寫法 4.5) &用于連接字符串 5) vbCrLf相當于鍵盤上的回車鍵 作業(yè): 1) 在我國的數學經典著作"九章算術"中有這樣一道題:百錢買百雞, 公雞5錢一只, 母雞3錢一只, 小雞1錢3只)求得是能有多少種辦法買這些雞. 如果看不懂的話我用大白話說說:有人要去買雞, 用100塊錢正好買了100只雞, 價格如下:公:5$, 母:3$, 小:1$ for 3, 讓你求一共多少種賣法(公母小怎么搭配). 請用循環(huán)解決這個問題. ps:今天要去移民局辦事, 所以文章寫的很倉促. 大部分代碼都沒有實驗, 請大家?guī)臀艺义e. 另外, 上次的作業(yè)大家在論壇應該看到了, 我就不重復答案了, 不知道大家喜歡做這種題, 還是以前那種比較簡單的? 第五篇(共六篇) 請允許我先描述一下我現在的環(huán)境:氣溫高達37攝氏度, 而我忘記了圖書館開門的時間, 還要在這里站上一個小時, 在熱帶植物的包裹下, 各種奇怪的小飛蟲圍著我轉來轉去. 不過令我欣慰的是, 終于寫到五了, 還有兩課我們的"基礎篇"就要結束了. 今天我們來了解語言本身的最后一個論題:數組. 要理解"數組", 這個概念我覺得另一種翻譯對學習來說更加容易:"陣列", 沒錯, 數組就是一個陣列, 一個數據的陣列. 最簡單的例子是數據庫系統(tǒng), 假設你要儲存20名學生的英語成績, 如果不是用數組, 你則要創(chuàng)建20個不同的變量, 累死. 數組就是類型相同(重要!)的一組數據(或者n組), 用來儲存相關的量, 最簡單的數組是一維數組, 我們就先來學習它吧. 什么是一維數組呢? 在3維以下,你可以利用幾何知識來理解"維"的概念,一維相當于一條線, 二維則是一個矩形, 三維是一個長方體. 我知道這么講是很抽象的, 我們先舉個一維數組的例子就比較容易了解了. dim a(9) 從零開始 for i=0 to 9 a(i)=i 填充每一個數組元素 msgbox a(i) 輸出數組元素 next 我們可以看到, 定義一個數組的方法和定義一個變量沒有什么不同, 同樣是使用dim語句. 定義一維數組的方法如下: dim 數組名(元素數量), 這里大家要注意一點, 這里定義的元素數量總是比你要的要少一個, 因為一個數組的起點是0號數據而不是1, 所以大家一定要小心: 你需要10個數據, 就定義"9", 需要100個就定義99, 依此類推. 數組的元素可以看成一個個獨立的變量, 你可以像獨立的變量那樣使用他們. 數組元素的量可能是毫無關系的, 比如第一個數組元素儲存你的年齡, 第二個儲存今年西瓜的銷售量, 但這種做法是不鼓勵的, 甚至是不被接受的, 不要這么干, 這樣的情況請定義獨立的變量. for語句在數組中可算是大顯身手, 還記得for嗎? 它累加一個變量, 我們可以把這個變量應用在數組中正好用來讀取或者填充按照順序排列的數組元素, 上面就是這樣一個例子. 數組其實是很簡單的東西(再BASIC語言里面), 數組難的是怎么搗弄這些循環(huán), 讓他們按照你的要求運轉. 這個等到二維數組再說, 我們先看看如何手工填充數組. 如果你這個都想不到的話, 那你真是白學了: dim name(7),str 一共八個學生, str變量是用來把他們儲存成一個字符串以便輸出 for i=0 to 7 name(i)=inputbox("請輸入第" & i+1 & "個學生的名字") str=str & " " & name(i) next msgbox str 這樣我們就有了一個小小的數據庫, 它們的數據排列可以看成這樣: name(0),name(1),name(2).....name(7) 看到了吧, 所以我說我們可以把它看成是"一條線", 等到我們學到了文件操作, 就可以把他們輸出到文件中去了. 一維數組有很多用處, 我們來看一下一個復雜的例子. 我們要儲存3各學生的名字, 身高, 成績這三種數據, 由于名字是字符串, 而身高可能是浮點數(帶小數點的數), 成績則可能是整數, 所以我們不能把他們儲存在一個數組里面(不要忘記, 數組織只能存儲同類的數據), 所以我們要建3個數組, 以下是例程: dim name(2), high(2), mark(2) 定義三個數組分別儲存3個人的名字, 身高和得分 dim ctr 計數器 for ctr=0 to 2 name(ctr)=inputbox("請輸入第" & ctr+1 & "個學生的姓名") high(ctr)=inputbox("請輸入第" & ctr+1 & "個學生的身高") mark(ctr)=inputbox("請輸入第" & ctr+1 & "個學生的得分") next OK, 我們已經填充好了數據, 現在我們的小小數據庫只能按順序輸入, 我們要讓它看起來像點樣子, 我們來給他設計查詢功能: 接著上面的程序 dim cname, temp 要查詢的名字, 和一個臨時變量, 用來儲存數據的位置 cname=inputbox("請輸入你要查詢的名字:") for ctr=0 to 2 遍歷所有name數組的成員, 尋找要查詢的名字 if name(ctr)=cname then temp=ctr 記錄數據位置 exit for 退出循環(huán), 和exit do的用法一樣 end if 不要忘了end if next msgbox "姓名:" & name(temp) & " " & "身高:" & high(temp) & " " & "得分:" & mark(temp) 嘿嘿, 有意思吧, 其實在這個程序里面, 那個temp變量完全沒有必要, 只是為了更清楚地說明問題. 因為當exit for以后ctr變量的值就不會改變, 儲存的正好是對應數據在數組中的位置, 寫這個temp變量是為了照顧到以后要學C++的朋友(C++可以在for語句里聲明新變量, 只在這個for結構中有效, 所以到了外部就不能訪問了). 也就是說可以簡化成如下: dim cname cname=inputbox("請輸入你要查詢的名字:") for ctr=0 to 2 if name(ctr)=cname then exit for 因為只有exit for就不需要塊if了 next msgbox "姓名:" & name(ctr) & " " & "身高:" & high(ctr) & " " & "得分:" & mark(ctr) 這是最直接的路子. 好好重讀一下上面所有的源代碼, 然后自己寫幾個程序, 完全搞清楚一維數組及其應用以后再看后面的二位數組. 二維數組好像是一個一維數組的集合, 就好像"線積成面"一樣, 由n各一維數組組成二維數組, 這是初學者比較好理解的辦法(比較精確的是用"編號"的概念去理解, 因為4維以上的數組就比較難以用歐幾里德幾何概念去解釋了). 二維數組是很好解釋的, 我們來看一下: dim a(2,2) 從零開始, 一共有3 X 3 = 9 個數據 dim i,j 需要兩個計數器 for i=0 to 2 for j=0 to 2 使用嵌套循環(huán) a(i,j)="X" next next 我們創(chuàng)建了一個這樣的二維數組(那些","是我用來分割元素的,并不存在), 了解二維數組的了嗎? 不清楚我們再講一下 編號 0 1 2 0 X,X,X 1 X,X,X 2 X,X,X 二維數組的看起來是不是就是一個矩形呢?(你在內存中看不到這樣的矩形, 只是便于你理解), 每個數據都有編號, 由兩個數來定位, 這個很像(非常像)你在國際象棋棋盤上尋找一個格, 我們用類似"C6","A2"這樣的"垂直坐標"進行定位, 對, "垂直坐標", 很確切. 我們要使用一個二維數組元素的時候可以和普通變量一樣使用, 只要指定數組元素的"定位點"就可以了, 例如a(0)(1)=1, b(2)(1)="你好", 諸如此類. 要注意的是二維數組也只能儲存類型相同的元素, 而且上標(起點)也從0開始. 計算一個二維數組的元素個數只要把兩個下標+1(以得到實際的值)再乘起來就可以了, 非常類似于求一個矩形的面積. 假如需要儲存的都是同一類型的數據, 我們就可以用二維數組, 比如要儲存5個人的姓名,國籍,民族, 就可以使用二維數據 dim info(4,2) 一共五個人, 要儲存的數據類型有3項 dim i,j for i=0 to 4 for j=0 to 2 dim opt 定義一個變量用于存儲數據項提示 select case j 判斷應該輸入的是什么數據 case 0 opt="姓名" case 1 opt="國籍" case 2 opt="民族" end select info(i,j)=inputbox("請輸入第" & i+1 & "個人的" & opt) next next 輸出太麻煩了, 我懶得動, 你知道那么回事就行了 這樣就不需要定義3個一維數組了. 多位數組(三維以上)的定義和使用方法與二維數組一樣, 但不太好在歐幾里德幾何空間里加以解釋, 幸好我們并不太常用那么多維的數組.定義一個三位數組:dim a(1,2,3) 一共24各數組元素. 今天因為要搬家(我喜歡Sengkang啊, 可是MM嫌交通不便, 誰不知道她只想去逛街),而GF要去和她的同學去參加什么試驗半夜才回家, 所以下午我只能自己去押車搬家了, 5555~~好可憐, 這次就請大家原諒我少寫一點, 我可是站在圖書館外寫的啊, 現在腿都軟了~~~ 本來還要講"動態(tài)數組"的, 但想了想還是放到"進階部分"再說吧. 要點: 1) 一維數組是"線", 二維數組是"面", 三維數組是"體" (多維數組就亂套) 2) 數組的下標從0開始 3) for循環(huán)在數組的應用中起了很大作用, 二維數組需要嵌套循環(huán) 作業(yè): 上次出的"百雞問題", 大家喜歡嗎? 以后我們就做這種需要動腦的題目, 那些簡單的實踐, 大家一定要多做! 1) 定義一個數組, 包含5個元素, 都是隨機整數(隨便輸入), 要求把他們按照從大到小的順序排列起來 2) 有兩個二維數組a(4,4)和b(4,4) (元素值隨便), 交換兩個數組(原來的a的所有元素值變成b的, b的所有元素值變成a的) 最后一篇: 新家不錯, MM開心, 我也就跟著高興了!今天我們學習基礎篇的最后一個部分:自定義函數和過程. 我們每天都在和函數打交道, i- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- VBS VBE 由淺入深 方案
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://italysoccerbets.com/p-8819987.html