Download presentation
Presentation is loading. Please wait.
1
ASP.NET 網頁製作教本 – 從基本語法學起
第4章 VB.NET 程式與 網頁製作的應用
2
4-1 陣列(Array)
3
陣列(Array)
4
陣列的宣告與使用(1) 陣列必須先宣告才能使用,其宣告格式 與變數的宣告很像 最簡單的陣列宣告格式是: Dim 陣列名稱(N)
5
陣列的宣告與使用(2) 其中 N 代表陣列中最後一項資料的順序,例如:
6
陣列的宣告與使用(3) 一旦宣告了陣列,我們就可以存取陣列中各單項的資料,存取的方法是在陣列名稱之後加上 "(資料順序)",例如:
X(0) = 168 ‘ 將 168 存到陣列 X 的第 0 項資料中 X(1) = 350 ’ 將 350 存到陣列 X 的第 1 項資料中 X(2) = X(0) + X(1) ‘ 分別取出陣列 X 的第 0 項及第 1 項資料, ' 相加後,存到第 2 項資料中
7
陣列的宣告與使用(4) 在術語上,陣列中的每一項資料叫做一個元素(element),而用來指定某一個元素的 0、1、2、…順序叫做註標(subscript),如下:
8
陣列的初值設定 實例: 所有資料以逗號(,)分隔,然後撰寫在 { } 裡面, 不過請注意 ( ) 裡面不可以含有 N,例如以下 的宣告式是錯誤的: 含有初值設定的陣列,VB 會自動計算其元素 個數,以上面的 X 陣列為例,含有三個元素, 所以有效的註標範圍是 0~2。 Dim A = "我是變數" ' 變數的初值設定 Dim X() = { "Word", "Excel", "Access" } ' 陣列的初值設定 Dim X(2) = { "Word", "Excel", "Access" } ' 錯誤
9
設定陣列的資料型別 Dim 陣列名稱(N) As 資料型別 「As 資料型別」其作用是設定陣列元素的資料型別,例如:
Dim Y(10) As Integer ‘ 宣告一個含有11個元素的陣列而每 ' 一個陣列元素的資料型別都是整數
10
陣列的優點 (1) 例如我們把 5 項資料放在 5 個變數裡面 :
Dim A, B, C, D, E A = "Word" B = "Excel" C = "PowerPoint" D = "Access" E = "Outlook"
11
陣列的優點(2) 將它們逐行輸出,必須使用 5 個敘述:
Response.Write( A & "<P>" ) Response.Write( B & "<P>") Response.Write( C & "<P>") Response.Write( D & "<P>" ) Response.Write( E & "<P>" )
12
陣列的優點 (3) 如果我們把這 5 項資料放在陣列裡面,則只需三行敘述就可以將它們全部輸出,如下:
Dim I Dim X() = {"Word", "Excel", "PowerPoint", "Access", "Outlook"} ' 輸出X的5個元素,只需以下三行敘述 For I = 0 To Response.Write( X(I) & "<P>" ) Next
13
陣列的優點 (4) 即使資料的項數多達 100項,也只要將上述程式 For 敘述中的 4 改成 99,就可以輸出全部資料,不像輸出 100個變數需要撰寫 100 個敘述。
14
Ubound 函數(1) Ubound 是 VB 所提供的函數,用途是讀 取陣列中最大的註標,使用時須傳入陣 列的名稱。
For I = 0 To UBound(X) Response.Write( X(I) & "<P>" ) Next
15
Ubound 函數(2) 例如 UBound(X) 表示讀取 X 陣列中最大 的註標,假設 X 陣列的元素包含 X(0)~ X(4),則 UBound(X) 等於 4,如果 X 陣 列的元素包含 X(0)~X(2),則 UBound(X) 等於 2,因為 Ubound 具有此一特性,所 以不管 X 陣列有何變動,以上的 For 迴 圈都不必跟著修改。
16
重新設定陣列的大小 (1) 用 Dim 宣告一個陣列之後,其大小 就確定下來了,例如:
Dim X(5) As Integer ' X陣列的大小 = 6 Dim Y() = {1, 2, 3 } ' Y陣列的大小 = 3 Dim Z() ' Z陣列的大小 = 0, 空陣列
17
重新設定陣列的大小 (2) 動態改變陣列的大小,必須使用 ReDim敘述,假設原有一陣列 A, 而我們想將其大小改變成 11,則敘 述如下:
ReDim A(10)' 將A陣列的大小改成11, 內容全部歸零 或 ReDim Preserve A(10)' 將A陣列的大小改成11, 但保留原內容
18
重新設定陣列的大小 (3) Preserve 保留字的使用:
程式一、 Dim A() = { "Word", "Excel", "Access" } ReDim A(5) Response.Write( A(0) ) ' 輸出: (無資料) 程式二、 Dim A() = { "Word", "Excel", "Access" } ReDim Preserve A(5) Response.Write( A(0) ) ' 輸出: Word
19
重新設定陣列的大小 (4) 程式一在執行 ReDim 敘述之後,原 本 A(0)、A(1)、A(2) 所含有的 "Word", "Excel", "Access" 資料都會 消失,而程式二則會保留A(0)、A(1)、 A(2) 原有的資料。
20
練習(1) 有三個陣列如下: Dim Book() = {"F8308", "F8315", "F8316", "F8317"}
Dim Name() = {"VB6 與 Windows API 講座", "新觀念的 VB6 教本", _ "VB6 實戰講座", "VB6 資料庫程式設計"} Dim Title() = {"VB專業人員最不可或缺的一本書", _ "一本為完全初學者所寫的書", _ "一本實用的‧技術的‧資訊完整的書", _ "從實務經驗中整理出來的資料庫設計寶典"}
21
練習(2) 將它們輸出成為下圖:(提示:須使用 <DL>、<DT>、<DD>、及 <BR> 標示)
22
陣列與排序 (1) 排序(Sort)是指將一連串資料從小排到大,例如 { 3, 9, 15, 8, 4 }排序後就成為 { 3, 4, 8, 9, 15 },只要呼叫 Array.Sort 這個方法,就可以完成陣列資料的排序,請看以下例子: Dim X() As Integer = { 3, 9, 15, 8, 4 } Array.Sort( X ) ' 呼叫Array.Sort之後, X 變成{ 3, 4, 8, 9, 15 }
23
陣列與搜尋(1) 搜尋陣列中是否含有某一種資料,舉例 來說,有一「姓名」陣列如下:
如何找到 "Peter" 在「姓名」陣列中的註 標(位置)呢? Dim 姓名() = { "Adam", "Alan", "Peter", "Jhon", "Tom" }
24
陣列與搜尋 (2) 如果用 For 迴圈搜尋資料 :
Dim I As Integer For I = 0 To UBound(姓名) If 姓名(I) = "Peter" Then ' 表示已經搜尋到資料 Response.Write( "Peter 的註標是 " & I ) Exit For ' 離開 For 迴圈 End If Next If I > UBound(姓名) Then Response.Write( "Peter 不存在於「姓名」陣列" ) End If
25
陣列與搜尋 (3) 呼叫 Array.IndexOf 方法才是更高明的方法,同樣是搜尋「姓名」陣列中是否含有 “Peter”,改用 Array.IndexOf 方法的程式如下: I = Array.IndexOf(姓名, "Peter") If I >= 0 Then Response.Write("Peter 的註標是 " & I) Else Response.Write("Peter 不存在於「姓名」陣列") End If
26
陣列與搜尋 (4) 有關 Array.IndexOf 的用法是:
傳回值表示搜尋的結果,當傳回值<0時,表 示沒有搜尋到資料;當傳回值≧0時,表示已 經搜尋到資料,而傳回值等於欲搜尋的資料在 陣列中的位置,以上面的例子為例,“Peter” 在「姓名」陣列的位置等於 2,所以傳回值等 於2。
27
應用實例(1) 陣列經常用在對照表的查詢,一個陣列存放著某些名詞,而第二個陣列存放著名詞的解釋,例如:
Dim 名詞 () = {“HTML”, “ASP”, “ADO”, “RDS” } Dim 解釋 () = {“HyperText Markup Language, 超文字標示語言”, _ “Active Server Pages, 動態伺服端網頁”, _ “ActiveX Data Object, 資料存取物件”, _ “Remote Data Service, 遠端資料存取服務"}
28
應用實例(2) 那麼讓上網者輸入名詞,然後查詢該名詞的解釋,所撰寫的程式將如下:
Dim data = Request("Name") ' 讀取上網者所輸入的名詞 Dim I = Array.IndexOf( 名詞, data ) If I >= 0 Then Response.Write( "<DL>" ) Response.Write( "<DT>" & 名詞(I) ) Response.Write( "<DD>" & 解釋(I) ) Response.Write( "</DL>" ) Else Response.Write( data & " 沒有對應的名詞解釋" ) End If
29
應用實例(3) 輸入以下網址,以檢驗程式執行的情況:
(1)Name=VBScript:I 值 < 0,會顯示 「VBScript 沒有對應的名詞解釋」。 (2) Name=ASP:由於「名詞(1)」等於 “ASP”,所以 I 值將等於 1,而顯示: (1) (2)
30
練習 河狸國小三年甲班有 20 位同學,老師想要將第一次期中考的 ASP 成績公布於score.aspx 網頁,讓同學自行上網查詢,查詢的方法是「score.aspx?Num=學號」,請幫這位老師完成此一網頁。(註:三年甲班 20 位同學的學號是 3101~3120,而分數就讓您來決定吧) (提示:將學號 "3101"~"3120" 存放在第一個陣列,而每一位學生的成績則存放在第二個陣列)
31
搜尋多筆資料(1) 有時陣列中會有一些相同的資料,例如我們想找出陣列中所有 100 分的同學,該怎麼找呢?假設資料存放成以下兩個陣列:
Dim 同學() = {"陳桶一", "黃光權", "胡生妙", "王為全", _ "李日正", "劉德菖", "方正一", "劉康寶", _ "謝掬花", "王美蘭", "徐小噹", "葉小毛"} Dim 數學() = {90, 58, 41, 100, 59, 28, 100, 0, 100, 41, 91, 0}
32
搜尋多筆資料(2) 那麼所撰寫的搜尋程式將如下: Dim I = Array.IndexOf(數學, 100)
While I >= 0 ' 表示搜尋到資料 Response.Write ( 同學(I) & "<P>" ) I = Array.IndexOf(數學, 100, I + 1) End While
33
搜尋多筆資料(3) 以上程式出現了兩個 Array.IndexOf,而第二個 Array.IndexOf 比第一個Array.IndexOf 多了一個參數:
34
二維陣列 (1) 陣列也可以存放表格式的資料,例如:
35
二維陣列 (2) 以這個表格為例,計有 5 列、4 行,所以共有 5×4 項資料,如果使用陣列來儲存,則陣列寫成:
36
二維陣列 (3) 像這樣含有兩個註標的陣列,稱為二維陣列,而存取二維陣列的資料也會使用到兩個註標,例如:
X(1, 2) = ' 將第 1 列、第 2 行的資料指定成 0.42 Response.Write(X(3, 2)) ' 輸出第 3 列、第 2 行的資料
37
二維陣列 (4) 如果我們將整個陣列的註標標示出來,則是:
38
二維陣列資料的輸出(1) 如果要對整個二維陣列的資料進行輸出,通常要使用 For-Next 巢狀迴圈,例如:
Dim I, J Dim X(4,3) For I = 0 To Response.Write( "<BR>輸出第 " & I & "列資料<BR>" ) For J = 0 To Response.Write( "(" & I & "," & J & ") = " ) Response.Write( X(I, J) & "<BR>" ) Next Next
39
二維陣列資料的輸出 (2) 程式以「列」為外迴圈,所以外迴圈每執行一次,便輸出一橫列的資料。如果以「行」為外迴圈,則外迴圈每執行一次,便輸出一直行,程式如下: Dim I, J Dim X(4,3) For J = 0 To Response.Write( "<BR>輸出第 " & J & " 行資料<BR>" ) For I = 0 To Response.Write( "(" & I & "," & J & ") = " ) Response.Write( X(I, J) & "<BR>" ) Next Next
40
練習 修改剛才的 2D1.aspx,使其二維陣列輸出成:
41
多維陣列 除了一維跟二維陣列之外,我們也可以 建立一個多維陣列,如下: 例如:
Dim Z(3, 4, 5, 6, 9) ‘ 宣告一個五維陣列, 可儲存的資料數 ' 共有 (3+1)(4+1)(5+1)(6+1)(9+1)=8400
42
4-2 副程式與函數
43
<script> 標示 副程式與函數必須放在 <script> 與 </script> 標 示之間,例如: 在 <script> 標示中,Language 參數設定成 “VB”,表示其中的程式語言為 VB,runat 參 數設定成 “server”,表示其中的程式將會在 server 端執行。 <script Language="VB" runat="server"> Sub 副程式X ‘ 在此撰寫副程式X的程式碼 End Sub </script>
44
從「敘述區塊」到「副程式」(1) 將敘述區塊轉換成副程式,先看以下程式:
<% Dim Name As String Dim score As Integer Name = "張無忌" score = 51 Response.Write( Name & ", " ) If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If Response.Write( "<HR>" ) %>
45
從「敘述區塊」到「副程式」(2) <% Name = "張無忌" score = 51 Call IsScorePassed
Response.Write( "<HR>" ) %> <script Language="VB" runat="server"> Dim Name As String Dim score As Integer Sub IsScorePassed Response.Write( Name & ", " ) If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If End Sub </script>
46
副程式的呼叫與返回(1)
47
練習 將「If week = 1 Then」與「End If」之間的敘述改成名稱為 OutputWeekColor 的副程式:
<HTML> <BODY> 今天是: <% Dim Week Week = DatePart( DateInterval.Weekday, Now() ) If Week = 1 Then ' 星期日 Response.Write( "<FONT COLOR=Red>" ) ElseIf Week = 7 Then ' 星期六 Response.Write( "<FONT COLOR=Green>" ) Else Response.Write( "<FONT COLOR=Blue>" ) End If Response.Write( WeekdayName(Week) ) Response.Write( "</FONT>" ) %> </BODY> </HTML>
48
帶有參數的副程式(1) 會決定副程式執行結果的變數,通常把它設定成副程式的參數,如下:
49
帶有參數的副程式(2) <% Dim Name As String Dim score As Integer Name = "張無忌"
Name = "張無忌" score = 51 IsScorePassed( Name, score ) Response.Write( "<HR>" ) %> <script Language="VB" runat="server"> Sub IsScorePassed( Name, score ) Response.Write(Name & ", ") If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If End Sub </script>
50
帶有參數的副程式(3) 修改的過程是: 1. 副程式的修改部分:將關鍵性的變數取出,將其放在 ( ) 裡面,然後擺在副程式名稱之後。
1. 副程式的修改部分:將關鍵性的變數取出,將其放在 ( ) 裡面,然後擺在副程式名稱之後。 2. 呼叫端的修改部分:將呼叫之前所需設定的變數(本例是 Name 及 score )串在副程式名稱之後。
51
帶有參數的副程式(4) <% IsScorePassed( "張無忌", 51 )
Response.Write( "<HR>" ) IsScorePassed( "王國榮", 80 ) %> <script Language="VB" runat="server"> Sub IsScorePassed( Name, score ) Response.Write(Name & ", ") If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If End Sub </script>
52
實例 (1) 有兩個陣列如下: 分別記錄著三年甲班同學的姓名及 ASP.NET 的學期分數:
Dim 姓名() = { “陳桶一”, “黃光權”, “胡生妙”, “王為全”, _ “李日正”, “劉德菖”, “方正一”, “劉康寶”, _ "謝掬花", "王美蘭", "徐小噹", "葉小毛"} Dim 分數() = {90, 58, 41, 95, 59, 28, 98, 0, 95, 41, 91, 0 }
53
實例 (2) 請逐一讀取每一位同學的姓名及分數,然後呼叫 IsScorePassed 副程式,顯示出以下網頁:
54
實例 (3) 所撰寫的程式如下: Dim I For I = 0 To UBound(姓名)
IsScorePassed( 姓名(I), 分數(I) ) Response.Write( "<BR>" ) Next
55
練習(1) 三年甲班同學的「姓名、BCC 學期成績、ASP 學期成績、VB 學期成績」的陣列分別如下:
Dim NameList() = { “陳桶一”, “黃光權”, “胡生妙”, “王為全”, _ “李日正”, “劉德菖”, “方正一”, “劉康寶”, _ "謝掬花", "王美蘭", "徐小噹", "葉小毛" } Dim BCCList() = { 90, 58, 41, 95, 59, 28, 98, 0, 95, 41, 91, 0 } Dim ASPList() = { 76, 77, 14, 97, 66, 11, 100, 0, 74, 46, 99, 10 } Dim VBList() = { 98, 75, 33, 87, 57, 33, 100, 10, 89, 49, 84, 0 }
56
練習(2) 寫一含有四個參數的 CalcScore 副程式,所傳入之參數分別為 Name(姓名)、 BCC(BCC 學期成績)、ASP (ASP 學期成績)及 VB(VB 學期成績),而副程式在接收到這四個參數之後,須輸出以下的 HTML 格式: <TR> <TD>Name</TD> <TD>BCC</TD> <TD>ASP</TD> <TD>VB</TD> <TD>總成績</TD> <TD>平均分數</TD> </TR>
57
練習(3) 最後再呼叫此一副程式,輸出以下表格:
58
函數(Function) 函數是另一種特殊形式的副程式,這種副程式有的存在於 VB 的語言系統裡,稱為內建函數,我們曾經使用過的 Now、DatePart、WeekdayName、Cint 都是 VB的內建函數,而另一種函數則可以像副程式一樣由我們自己定義,稱為自定函數。 低。
59
從副程式到函數 唯一的差別只是將 Sub 保留字改成Function 保留字,其他地方都沒有改變。
Function IsScorePassed(Name, score) Response.Write( Name & ", " ) If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If End Function
60
傳回值 T = Now ' Now函數的傳回值為系統時間 ASP = Request("ASP") V = CInt(ASP) ' CInt函數的傳回值是一個整數 以上的 Now 及 Cint 都是 VB 的內建函數,其特色都是在被呼叫之後,會傳回某一份資料(例如 Now 函數傳回系統時間),這份被傳回的資料就稱傳回值。
61
設定傳回值的語法 如何讓函數真的能傳回值呢?方法是在函數結束執行之前,執行以下敘述: Return 欲傳回的值
62
實例一(1) 寫一 f(X) = X^2 + 2*X + 1 的函數
由於我們希望函數能夠傳回 X^2 + 2*X + 1 運算式的結果,所以便撰 寫 Return X^2 + 2*X + 1」將 X^2 + 2*X + 1 運算的結果指定成函數 f 的傳回值。 Function f(X) Return X^2 + 2*X + 1 End Function
63
實例一(2) 呼叫 f 函數的例子:(Fun1.aspx)
Dim A = f(3) ' 呼叫f, 傳入3為參數, 結果傳回3^2 + 2*3 + 1 Response.Write( "A = " & A & "<P>" ) ' 輸出結果: 16 Dim V = 2 Dim B = f(V) ' 呼叫f, 傳入變數V為參數, 結果傳回V^2 + 2*V + 1 Response.Write( "B = " & B & "<P>" ) ' 輸出結果: 9
64
實例二(1) 寫一 Sum(N) = 1+2+…+N 的函數。
65
實例二(2) Fun2.aspx <% Dim N = Val( Request("N") )
Response.Write( "您輸入的 N=" & N & "<P>") Response.Write( "Sum(N)=" & Sum(N) ) %> <script Language="VB" runat="server"> Function Sum(N) Dim I, Total For I = 1 To N Total = Total + I ' 逐一將 1, 2, … 加到 Total Next Return Total End Function </script>
66
練習 寫一函數傳入 1~12,然後傳回對應的中文月份,例如傳入 8 即傳回 "八月"。
67
4-3 VB 內建函數的實際應用
68
字串類型函數 用 UCase/LCase 函數避免大小寫問題。 用 Trim 函數除去不必要的空白字元。
用 Join 函數簡化陣列資料的輸出 Split 函數與重複性資料的輸入。 。 Replace 函數與字串的取代。
69
UCase/Lcase (1) 用 UCase/LCase 函數避免大小寫問題 。
將字串轉成大寫及小寫的函數分別是Ucase 及 Case,使用例如下: Name = Request("Name") ' 假設Name參數值等於 "Asp" Response.Write(UCase(Name)) ' 輸出: ASP Response.Write(LCase(Name)) ' 輸出: asp
70
UCase/Lcase (2) NameExp2.asp <%
Dim 名詞() = {"HTML", "ASP", "ADO", "RDS" } Dim 解釋() = {"HyperText Markup Language, 超文字標示語言", _ "Active Server Pages, 動態伺服端網頁", _ "ActiveX Data Object, 資料存取物件", _ "Remote Data Service, 遠端資料存取服務"} Dim data = Request("Name") ' 讀取上網者所輸入的名詞 Dim I = Array.IndexOf( 名詞, UCase(data) ) If I >= 0 Then Response.Write( "<DL>" ) Response.Write( "<DT>" & 名詞(I) ) Response.Write( "<DD>" & 解釋(I) ) Response.Write( "</DL>" ) Else Response.Write( data & " 沒有對應的名詞解釋" ) End If %>
71
Trim (1) 用 Trim 函數除去不必要的空白字元。
而 NameExp2.aspx 經修改之後成為: X = Trim(" ASP") ' 結果 X = "ASP" Dim data = Request("Name") data = Trim(data) ' 新增此一敘述 Dim I = Array.IndexOf( 名詞, UCase(data) )
72
Trim (2) NameExp3.aspx: <%
Dim 名詞() = {"HTML", "ASP", "ADO", "RDS" } Dim 解釋() = {"HyperText Markup Language, 超文字標示語言", _ "Active Server Pages, 動態伺服端網頁", _ "ActiveX Data Object, 資料存取物件", _ "Remote Data Service, 遠端資料存取服務"} Dim data = Request("Name") ' 讀取上網者所輸入的名詞 data = Trim(data) Dim I = Array.IndexOf( 名詞, UCase(data) ) If I >= 0 Then Response.Write( "<DL>" ) Response.Write( "<DT>" & 名詞(I) ) Response.Write( "<DD>" & 解釋(I) ) Response.Write( "</DL>" ) Else Response.Write( data & " 沒有對應的名詞解釋" ) End If %>
73
Join 用 Join 函數簡化陣列資料的輸出。
結果 X 等於 "F8308<P>F8315<P>F8316<P>F8317" 。 Dim Arr() = {"F8308", "F8315", "F8316", "F8317"} Dim X = Join(Arr, "<P>")
74
Join 實例 (1) 有一陣列如下: 希望將此一陣列輸出成:
Dim Books() = { _ "F8308 VB6 與 Windows API 講座", "F8315 新觀念的 VB6 教本", _ "F8316 VB6 實戰講座", "F8317 VB6 資料庫程式設計" }
75
Join 實例 (2) 如果不使用 Join 函數,而使用 For 迴圈,則此一 ASP 程式如下:(Books01.aspx) <%
Dim Books() = { _ "F8308 VB6 與 Windows API 講座", "F8315 新觀念的 VB6 教本", _ "F8316 VB6 實戰講座", "F8317 VB6 資料庫程式設計" } Response.Write( "學 VB 找王國榮系列叢書<HR>" ) Response.Write( "<UL>" ) Dim I For I = 0 To UBound(Books) Response.Write( "<LI>" & Books(I) ) Next Response.Write( "</UL>" ) %>
76
Join 實例 (3) 如果使用 Join 函數,則程式將更簡單,以上粗體字的程式可修改成 :
Response.Write( "<UL><LI>" & Join(Books, "<LI>") & "</UL>" )
77
Join 實例 (4) Books02.asp <% Dim Books() = { _
"F8308 VB6 與 Windows API 講座", "F8315 新觀念的 VB6 教本", _ "F8316 VB6 實戰講座", "F8317 VB6 資料庫程式設計" } Response.Write( "學 VB 找王國榮系列叢書<HR>" ) Response.Write( "<UL><LI>" & Join(Books, "<LI>") & "</UL>" ) %>
78
Split (1) Split 函數與重複性資料的輸入 。
其意義是輸入兩份資料,而兩份資料都 是以 Book 為參數,另一方面讀取資料 的方法還是使用 Request物件。 資料之間以 “,” 分隔,使用 Split 函數最為簡便,例如: Dim Book = Request("Book") Dim BookList = Split(Book, ",") ' BookList 變成陣列, BookList(0) = "F8308", BookList(1) = "F8315"
79
Split (2) 假設我們想把網頁輸出成: SplitEx.aspx <% Dim Book = Request( "Book" )
Dim BookList = Split(Book, ",") Response.Write( "您想購買的書有:" ) Response.Write( "<UL><LI>" & Join(BookList, "<LI>") & "</UL>" ) %>
80
Replace(1) Replace 函數與字串的取代 。
使用 Split 及 Join 兩個函數,其實使用 一個 Replace 函數就可以完成。 Dim BookList = Split(Book, ",") Response.Write( "<UL><LI>" & Join(BookList, "<LI>") & "</UL>" ) Response.Write( "<UL><LI>" & Replace(Book, ",", "<LI>") & "</UL>" )
81
Replace(2) Replace.aspx <% Dim Book = Request( "Book" )
Response.Write( "您想購買的書有:" ) Response.Write( "<UL><LI>" & Replace(Book, ",", "<LI>") & "</UL>" ) %>
82
數值類型函數 FormatNumber 函數與數值的輸出。 利用 Val 轉換數值資料。 Rnd 函數與亂數遊戲。
83
FormatNumber (1) FormatNumber 函數與數值的輸出 。
將下圖(左)改成下圖(右),「平均」欄位採四捨五入方式取小數點兩位,如何撰寫呢?
84
FormatNumber(2) 要採四捨五入方式取固定位數的小數須 使用 FormatNumber 函數,使用方法如下: 例如:
X = FormatNumber(數值, 所取之小數點位數) Dim X = FormatNumber( , 2) Response.Write( X ) ' 輸出: 60.67
85
FormatNumber(3) SubTab02.aspx Part I <%
Dim NameList() = { "陳桶一", "黃光權", "胡生妙", "王為全", _ "李日正", "劉德菖", "方正一", "劉康寶", _ "謝掬花", "王美蘭", "徐小噹", "葉小毛" } Dim BCCList() = { 90, 58, 41, 95, 59, 28, 98, 0, 95, 41, 91, 0 } Dim ASPList() = { 76, 77, 14, 97, 66, 11, 100, 0, 74, 46, 99, 10 } Dim VBList() = { 98, 75, 33, 87, 57, 33, 100, 10, 89, 49, 84, 0 } Response.Write( "<TABLE Border=1>" )
86
FormatNumber(4) SubTab02.aspx Part II ' 輸出第一列的標題
Response.Write( "<TR BgColor=Cyan><TD>姓名</TD>" ) Response.Write( "<TD>BCC</TD><TD>ASP</TD><TD>VB</TD>" ) Response.Write( "<TD>總分</TD><TD>平均</TD></TR>" ) ' 輸出陣列中的資料 Dim I For I = 0 To UBound(NameList) CalcScore( NameList(I), BCCList(I), ASPList(I), VBList(I) ) Next Response.Write( "</TABLE>" ) %>
87
FormatNumber(5) SubTab02.aspx Part III
<script Language="VB" runat="server"> Sub CalcScore( Name, BCC, ASP, VB ) Response.Write( "<TR>" ) Response.Write( "<TD>" & Name & "</TD>" ) Response.Write( "<TD>" & BCC & "</TD>" ) Response.Write( "<TD>" & ASP & "</TD>" ) Response.Write( "<TD>" & VB & "</TD>" ) Dim Total = CInt(BCC) + CInt(ASP) + CInt(VB) Response.Write( "<TD>" & Total & "</TD>" ) Response.Write( "<TD>" & FormatNumber((Total / 3), 2) & "</TD>" ) Response.Write( "</TR>" ) End Sub </script>
88
Val 利用 Val 轉換數值資料 。 試著輸入以下的參數:(BCC、ASP、及VB的成績都輸入為59.5)
Total = Val(BCC) + Val(VB) + Val(ASP) Val 的用途是將資料轉換成「實數」,例如 "59.5" 經轉換之後,會變成 59.5,不會四捨五入。
89
Rnd(1) Rnd 函數與亂數遊戲。 利用 Rnd 產生亂數,只能產生 0≦且<1 的亂數,但可利用以下方法,讓它產生 0~N-1 之間的整數:
90
Rnd(2) 為什麼 Fix(Rnd*N) 可以產生 0~N-1 之間的整數呢?
假設 N 等於 3,則 0≦Rnd*3<3,而 Fix 函數的作用是去掉小數留下整數,所以: 若 0≦Rnd*3<1,則經 Fix 轉換後會變成 0。 若 1≦Rnd*3<2,則經 Fix 轉換後會變成 1。 若 2≦Rnd*3<3,則經 Fix 轉換後會變成 2。 Fix(Rnd*3) 可能產生的值為 0、1、或 2(等於3-1 = N-1)。依此推論,Fix(Rnd*N) 會產生 0、1…N-1 之中的一個亂數。
91
Rnd 實例 P.192 (1) 寫一個可以擲出三個骰子的網頁。
92
Rnd 實例 P.192 (2) dice.aspx <% Dim D1 = Fix(Rnd * 6) + 1
Response.Write( "<IMG SRC=dice" & D1 & ".gif>" ) Response.Write( "<IMG SRC=dice" & D2 & ".gif>" ) Response.Write( "<IMG SRC=dice" & D3 & ".gif><P>" ) Response.Write( "<HR>您所擲出的點數是: " & D1 + D2 + D3 ) %> <p><A HREF=dice.aspx>重擲骰子</A>
93
Rnd 實例 P.193 (1) 寫一個樂透彩的電腦選號網頁。
94
Rnd 實例 P.193 (2) lotto.aspx Part I
#01 <H2>樂透彩 -- 電腦選號<HR></H2> #02 <% #03 Dim Num() = { "01", "02", "03", "04", "05", "06", "07", _ # "08", "09", "10", "11", "12", "13", "14", _ # "15", "16", "17", "18", "19", "20", "21", _ # "22", "23", "24", "25", "26", "27", "28", _ # "29", "30", "31", "32", "33", "34", "35", _ # "36", "37", "38", "39", "40", "41", "42" } #09 Dim Selected(5) #10 Dim I, K, D #11 #12
95
Rnd 實例 P.193 (3) lotto.aspx Part II For I = 0 To 5
#13 D = Fix(Rnd * (42-I)) #14 Selected(I) = Num(D) #15 Num(D) = "9999" #16 Array.Sort( Num ) #17 Next #18 Array.Sort( Selected ) #19 #20 Response.Write( "<UL><LI>" & Join(Selected, "<LI>") & "</UL>" ) #21 %> #22 <p><A HREF=lotto.aspx>重新選號</A>
96
日期時間類型函數 用 Year、Month 及 Day 函數自設日期格式。 用 Hour、Minute 及 Second 函數自設時間格式。
用 DateAdd 函數計算使用期限。 用 DateDiff 函數計算時間差。
97
用 Year、Month 及 Day 函數自設日期格式 (1)
98
用 Year、Month 及 Day 函數自設日期格式 (2)
<% Dim D = Now() Response.Write( "現在是: " & ChineseDate(D) & "<HR>" ) %> <script Language="VB" runat="server"> Function ChineseDate( D ) Dim ChineseYear Dim Y = Year(D) If Y > 1911 Then ChineseYear = "民國" & Y-1911 & "年" Else ChineseYear = "民國前" & (1911-Y+1) & "年" End If Return ChineseYear & Month(D) & "月" & Day(D) & "日" End Function </script>
99
用 Hour、Minute 及 Second 函數自設時間格式 (1)
100
用 Hour、Minute 及 Second 函數自設時間格式 (2)
<% Dim T = Now() Response.Write( "現在是: " & ChineseTime(T) & "<HR>" ) %> <script Language="VB" runat="server"> Function ChineseTime( T ) Dim ChTime Dim H = Hour(T) If H < 12 Then ChTime = "上午" & H & "時" Else ChTime = "下午" & (H-12) & "時" End If Return ChTime & Minute(T) & "分" & Second(T) & "秒" End Function </script>
101
用 DateAdd 函數計算使用期限(1) 如果您經營一個收費網站,而提供給試用者的試用期為 60 天,那麼如何在試用者申請時,告訴他可以使用到哪一天呢? 方法是讀取當時的系統日期(呼叫 Now 函數),然後利用 DateAdd 函數加上 60天: Dim D = DateAdd( "d", +60, Now ) Response.Write("謝謝您, 您可以試用到 " & ChineseDate(D))
102
用 DateAdd 函數計算使用期限(2)
103
用 DateAdd 函數計算使用期限(3) 如果您想改以 “月” 為使用的單位,則是將 DateAdd 函數的前兩個參數改成:"m" 及 +2,如下: Dim D = DateAdd( "m", +2, Date ) Response.Write("謝謝您, 您可以試用到 " & ChineseDate(D))
104
用 DateDiff 函數計算時間差 (1)
105
用 DateDiff 函數計算時間差 (2) 如果我們想製作含有「距離公元2010年還有 ?????? 秒」的網頁,大概非使用 DateDiff 函數不可,過程是讀取目前的系統日期時間,然後與 #01/01/ :00:00# 進行秒數差的計算,所撰寫的程式如下: S = DateDiff( "s", Now, #01/01/ :00:00# )
106
用 DateDiff 函數計算時間差 (3) 如果要計算 ‘天’ 數,則是將 DateDiff 的第一個參數由 "s" 改成 "d":
S = DateDiff( "d", Now, #01/01/ :00:00# )
107
用 DateDiff 函數計算時間差 (4) Y2010.aspx 完整範例如下: <%
Response.Write( "距離公元2010年還有: <UL>" ) Dim S = DateDiff( "s", Now, #01/01/ :00:00# ) Response.Write( "<LI>" & S & " 秒" ) S = DateDiff( "d", Now, #01/01/ :00:00# ) Response.Write( "<LI>" & S & " 天" ) Response.Write( "</UL>" ) %>
Similar presentations