ASP.NET 網頁製作教本 – 從基本語法學起

Preview:

DESCRIPTION

ASP.NET 網頁製作教本 – 從基本語法學起. 第4章 VB.NET 程式與 網頁製作的應用. 4-1 陣列 ( Array). 陣列 ( Array). 陣列的宣告與使用(1). 陣列必須先宣告才能使用,其宣告格式與變數的宣告很像 最簡單的陣列宣告格式是:. Dim 陣列名稱 ( N). 陣列的宣告與使用(2). 其中 N 代表陣列中最後一項資料的順序,例如:. 陣列的宣告與使用(3). 一旦宣告了陣列,我們就可以存取陣列中各單項的資料,存取的方法是在陣列名稱之後加上 " (資料順序) " ,例如:. - PowerPoint PPT Presentation

Citation preview

ASP.NET ASP.NET 網頁製作教本網頁製作教本 – – 從基本語法學起從基本語法學起

第第 44 章 章 VB.NET VB.NET 程式與程式與網頁製作的應用網頁製作的應用

4-1 4-1 陣列陣列 ((Array)Array)

陣列陣列 ((Array)Array)

350

799

168變數

陣列 168 350 799

每一個變數只能儲存一項資料,而幾個變數之間是個別獨立的。

陣列能夠儲存多項資料,而資料之間是依序排列的。

0 1 2

順序是 0、1、2…

陣列的宣告與使用陣列的宣告與使用 (1)(1)

陣列必須先宣告才能使用,其宣告格式陣列必須先宣告才能使用,其宣告格式與變數的宣告很像與變數的宣告很像

最簡單的陣列宣告格式是:最簡單的陣列宣告格式是:

' 宣告一個變數 A' 宣告一個陣列 X

Dim ADim X(3)

比變數多出的部份

Dim 陣列名稱 (N)

陣列的宣告與使用陣列的宣告與使用 (2)(2) 其中其中 N N 代表陣列中最後一項資料的順代表陣列中最後一項資料的順序,例如:序,例如:

0 1 2 3 4 排列順序

Dim X(4) 宣告一個名稱為 X 的陣列,其

資料排列順序是 0~4,共 5 項

陣列的宣告與使用陣列的宣告與使用 (3)(3)

一旦宣告了陣列,我們就可以存取陣列一旦宣告了陣列,我們就可以存取陣列中各單項的資料,存取的方法是在陣列中各單項的資料,存取的方法是在陣列名稱之後加上名稱之後加上 ""(( 資料順序資料順序 ))"" ,例如:,例如:

X(0) = 168 ‘ 將 168 存到陣列 X 的第 0 項資料中X(1) = 350 ’ 將 350 存到陣列 X 的第 1 項資料中X(2) = X(0) + X(1) ‘ 分別取出陣列 X 的第 0 項及第 1 項資料,

' 相加後,存到第 2 項資料中

陣列的宣告與使用陣列的宣告與使用 (4)(4)

在術語上,陣列中的每一項資料叫做一在術語上,陣列中的每一項資料叫做一個個元素元素 ((element)element) ,,而用來指定某一個元而用來指定某一個元素 的 素 的 00 、、 11 、、 22 、 … 順 序 叫 做、 … 順 序 叫 做 註 標註 標((subscript)subscript) ,,如下:如下:

X(0)

X(1)

X(2)

X(3)

X(4)

陣列 X

陣列元素 X(0)~X(4)

陣列註標 0~4

名稱 資料順序 資料內容X 0

1

2

3

4

陣列的初值設定陣列的初值設定 實例:實例:

所有資料以逗號所有資料以逗號 (,)(,) 分隔,然後撰寫在分隔,然後撰寫在 { } { } 裡裡面,不過請注意面,不過請注意 ( ) ( ) 裡面不可以含有 裡面不可以含有 NN ,,例例如以下的宣告式是錯誤的:如以下的宣告式是錯誤的:

含有初值設定的陣列,含有初值設定的陣列, VB VB 會自動計算其元素會自動計算其元素個數,以上面的 個數,以上面的 X X 陣列為例,含有三個元素,陣列為例,含有三個元素,所以有效的註標範圍是 所以有效的註標範圍是 00 ~~ 22 。。

Dim A = " 我是變數 " ' 變數的初值設定Dim X() = { "Word", "Excel", "Access" } ' 陣列的初值設定

Dim X(2) = { "Word", "Excel", "Access" }' 錯誤

設定陣列的資料型別設定陣列的資料型別

Dim Dim 陣列名稱陣列名稱 ((N) N) As As 資料型資料型別別

「「 As As 資料型別」其作用是設定陣列資料型別」其作用是設定陣列元素的資料型別,例如:元素的資料型別,例如:

Dim Y(10) As Integer ‘ 宣告一個含有 11 個元素的陣列而每 ' 一個陣列元素的資料型別都是整

陣列的優點陣列的優點 (1)(1)

例如例如我們把我們把 5 5 項資料放在項資料放在 5 5 個變數裡面個變數裡面 : :Dim A, B, C, D, EA = "Word"B = "Excel"C = "PowerPoint"D = "Access"E = "Outlook"

陣列的優點陣列的優點 (2)(2)

將它們逐行輸出,必須使用將它們逐行輸出,必須使用 5 5 個敘述:個敘述:

Response.Write( A & "<P>" )Response.Write( B & "<P>")Response.Write( C & "<P>")Response.Write( D & "<P>" )Response.Write( E & "<P>" )

陣列的優點陣列的優點 (3)(3)

如果我們把這 如果我們把這 5 5 項資料放在陣列裡面,項資料放在陣列裡面,則只需三行敘述就可以將它們全部輸出,則只需三行敘述就可以將它們全部輸出,如下:如下:

Dim IDim X() = {"Word", "Excel", "PowerPoint", "Access", "Outlook"}

' 輸出 X 的 5 個元素,只需以下三行敘述For I = 0 To 4 Response.Write( X(I) & "<P>" )Next

陣列的優點陣列的優點 (4)(4)

即使資料的項數多達 即使資料的項數多達 100100 項,也只項,也只要將上述程式 要將上述程式 For For 敘述中的 敘述中的 4 4 改成 改成 9999 ,就可以輸出全部資料,不像輸,就可以輸出全部資料,不像輸出 出 100100 個變數需要撰寫 個變數需要撰寫 100 100 個敘述。個敘述。

Ubound Ubound 函數函數 (1)(1) Ubound Ubound 是 是 VB VB 所提供的函數,用途是所提供的函數,用途是

讀取陣列中最大的註標,使用時須傳入讀取陣列中最大的註標,使用時須傳入陣列的名稱。陣列的名稱。

For I = 0 To UBound(X) Response.Write( X(I) & "<P>" )Next

Ubound Ubound 函數函數 (2)(2) 例如 例如 UBound(UBound(XX) ) 表示讀取 表示讀取 X X 陣列中最陣列中最

大的註標,假設 大的註標,假設 X X 陣列的元素包含 陣列的元素包含 X(0)X(0)~~ X(X(44)) ,,則 則 UBound(X) UBound(X) 等於 等於 44 ,,如果 如果 X X 陣列的元素包含 陣列的元素包含 X(0)X(0)~~ X(X(22)) ,,則 則 UBound(X) UBound(X) 等於 等於 22 ,因為 ,因為 Ubound Ubound 具有此一特性,所以不管 具有此一特性,所以不管 X X 陣列有何變陣列有何變動,以上的 動,以上的 For For 迴圈都不必跟著修改。迴圈都不必跟著修改。

重新設定陣列的大小重新設定陣列的大小 (1)(1)

用 用 Dim Dim 宣告一個陣列之後,其大宣告一個陣列之後,其大小就確定下來了,例如:小就確定下來了,例如:Dim X(5) As Integer ' X 陣列的大小 = 6Dim Y() = {1, 2, 3 } ' Y 陣列的大小 = 3Dim Z() ' Z 陣列的大小 = 0, 空陣列

重新設定陣列的大小重新設定陣列的大小 (2)(2)

動態改變陣列的大小,必須使用 動態改變陣列的大小,必須使用 ReDimReDim 敘述,假設原有一陣列 敘述,假設原有一陣列 AA ,,而我們想將其大小改變成 而我們想將其大小改變成 1111 ,則,則敘述如下:敘述如下:

ReDim A(10)' 將 A 陣列的大小改成 11, 內容全部歸零

ReDim Preserve A(10)' 將 A 陣列的大小改成 11, 但保留原內容

重新設定陣列的大小重新設定陣列的大小 (3)(3)

Preserve 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

重新設定陣列的大小重新設定陣列的大小 (4)(4)

程式一在執行 程式一在執行 ReDim ReDim 敘述之後,原敘述之後,原本 本 A(0)A(0) 、、 A(1)A(1) 、、 A(2) A(2) 所 含 有 的 所 含 有 的 ""Word", "Excel", "Access" Word", "Excel", "Access" 資料都會資料都會消 失 , 而 程 式 二 則 會 保 留消 失 , 而 程 式 二 則 會 保 留A(0)A(0)、、 A(1)A(1)、、 A(2) A(2) 原有的資料。原有的資料。

練習練習 (1)(1) 有三個陣列如下:有三個陣列如下:

Dim Book() = {"F8308", "F8315", "F8316", "F8317"}

Dim Name() = {"VB6 與 Windows API 講座 ", " 新觀念的 VB6 教本 ", _ "VB6 實戰講座 ", "VB6 資料庫程式設計 "}

Dim Title() = {"VB專業人員最不可或缺的一本書 ", _ " 一本為完全初學者所寫的書 ", _ " 一本實用的‧技術的‧資訊完整的書 ", _ " 從實務經驗中整理出來的資料庫設計寶典 "}

練習練習 (2)(2)

將它們輸出成為下圖:將它們輸出成為下圖: (( 提示:須使用提示:須使用 <<DL>DL> 、、 <DT><DT> 、、 <DD><DD> 、、及及 <<BR> BR> 標標示示 ))

陣列與排序陣列與排序 (1) (1)

排序排序 ((Sort)Sort) 是指將一連串資料從小排是指將一連串資料從小排到大,例如到大,例如 { 3, 9, 15, 8, 4 }{ 3, 9, 15, 8, 4 } 排序後排序後就成為就成為 { 3, 4, 8, 9, 15 }{ 3, 4, 8, 9, 15 } ,,只要呼叫 只要呼叫 Array.Sort Array.Sort 這個方法,就可以完成陣這個方法,就可以完成陣列資料的排序,請看以下例子:列資料的排序,請看以下例子:

Dim X() As Integer = { 3, 9, 15, 8, 4 }

Array.Sort( X ) ' 呼叫 Array.Sort之後 , X 變成 { 3, 4, 8, 9, 15 }

陣列與搜尋陣列與搜尋 (1)(1)

搜尋陣列中是否含有某一種資料,舉例搜尋陣列中是否含有某一種資料,舉例來說,有一「姓名」陣列如下:來說,有一「姓名」陣列如下:

如何找到 如何找到 ""Peter" Peter" 在「姓名」陣列中的在「姓名」陣列中的註標註標 (( 位置位置 )) 呢?呢?

Dim 姓名 () = { "Adam", "Alan", "Peter", "Jhon", "Tom" }

陣列與搜尋陣列與搜尋 (2)(2)

如果用 如果用 For For 迴圈搜尋資料迴圈搜尋資料 :: Dim I As Integer

For I = 0 To UBound(姓名 ) If 姓名 (I) = "Peter" Then ' 表示已經搜尋到資料 Response.Write( "Peter 的註標是 " & I ) Exit For ' 離開 For 迴圈 End IfNextIf I > UBound(姓名 ) Then Response.Write( "Peter 不存在於「姓名」陣列 " )End If

陣列與搜尋陣列與搜尋 (3)(3)

呼叫 呼叫 Array.IndexOf Array.IndexOf 方法才是更高明的方法才是更高明的方法,同樣是搜尋「姓名」陣列中是否方法,同樣是搜尋「姓名」陣列中是否含有含有 “ “ Peter”Peter” ,,改用 改用 Array.IndexOf Array.IndexOf 方方法的程式如下:法的程式如下: I = Array.IndexOf(姓名 , "Peter")If I >= 0 Then Response.Write("Peter 的註標是 " & I)Else Response.Write("Peter 不存在於「姓名」陣列 ")End If

陣列與搜尋陣列與搜尋 (4)(4)

有關 有關 Array.IndexOf Array.IndexOf 的用法是: 的用法是:

傳回值表示搜尋的結果,當傳回值<傳回值表示搜尋的結果,當傳回值< 00 時,表示時,表示沒有搜尋到資料;當傳回值≧沒有搜尋到資料;當傳回值≧ 00 時,表示已經搜時,表示已經搜尋到資料,而傳回值等於欲搜尋的資料在陣列中尋到資料,而傳回值等於欲搜尋的資料在陣列中的位置,以上面的例子為例,的位置,以上面的例子為例,““ Peter” Peter” 在「姓在「姓名」陣列的位置等於 名」陣列的位置等於 22 ,所以傳回值等於,所以傳回值等於 22 。。

I = Array.IndexOf(姓名, "Peter")

陣列

欲搜尋的資料傳回值:搜尋的結果

應用實例應用實例 (1)(1)

陣列經常用在對照表的查詢,一個陣列陣列經常用在對照表的查詢,一個陣列存放著某些名詞,而第二個陣列存放著存放著某些名詞,而第二個陣列存放著名詞的解釋,例如:名詞的解釋,例如:

Dim 名詞 () = {“HTML”, “ASP”, “ADO”, “RDS” }Dim 解釋 () = {“HyperText Markup Language, 超文字標示語言” , _ “ Active Server Pages, 動態伺服端網頁” , _ “ ActiveX Data Object, 資料存取物件” , _ “ Remote Data Service, 遠端資料存取服務 "}

應用實例應用實例 (2)(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

應用實例應用實例 (3)(3) 輸入以下網址,以檢驗程式執行的情況:輸入以下網址,以檢驗程式執行的情況:

(1)(1)Name=VBScriptName=VBScript:: I I 值 值 < 0< 0 ,會顯示,會顯示「「 VBScript VBScript 沒有對應的名詞解釋」。沒有對應的名詞解釋」。(2) (2) Name=ASPName=ASP ::由於「名詞由於「名詞 (1)(1) 」等於 」等於 ““ ASP”ASP” ,,所以 所以 I I 值將等於 值將等於 11 ,而顯示:,而顯示:

(1) http://localhost/kjaspx/ch04/NameExp.aspx?Name=VBScript(2) http://localhost/kjaspx/ch04/NameExp.aspx?Name=ASP

練習練習 河狸國小三年甲班有 河狸國小三年甲班有 20 20 位同學,老師位同學,老師想要將第一次期中考的 想要將第一次期中考的 ASP ASP 成績公布成績公布於於 score.aspx score.aspx 網頁,讓同學自行上網查網頁,讓同學自行上網查詢,查詢的方法是「詢,查詢的方法是「 score.aspx?score.aspx?Num=Num= 學學號號」,請幫這位老師完成此一網頁。」,請幫這位老師完成此一網頁。 (( 註:註:三年甲班 三年甲班 20 20 位同學的學號是 位同學的學號是 31013101 ~~31203120 ,而分數就讓您來決定吧,而分數就讓您來決定吧 )) ( ( 提示:提示:將學號將學號 "3101""3101" ~~ "3120" "3120" 存放在第一個存放在第一個陣列,而每一位學生的成績則存放在第陣列,而每一位學生的成績則存放在第二個陣列二個陣列 ))

搜尋多筆資料搜尋多筆資料 (1)(1)

有時陣列中會有一些相同的資料,例如有時陣列中會有一些相同的資料,例如我們想找出陣列中所有 我們想找出陣列中所有 100 100 分的同學,分的同學,該怎麼找呢?假設資料存放成以下兩個該怎麼找呢?假設資料存放成以下兩個陣列:陣列:

Dim 同學 () = {" 陳桶一 ", " 黃光權 ", " 胡生妙 ", " 王為全 ", _

" 李日正 ", " 劉德菖 ", " 方正一 ", " 劉康寶 ", _

" 謝掬花 ", " 王美蘭 ", " 徐小噹 ", " 葉小毛 "}

Dim 數學 () = {90, 58, 41, 100, 59, 28, 100, 0, 100, 41, 91, 0}

搜尋多筆資料搜尋多筆資料 (2)(2) 那麼所撰寫的搜尋程式將如下:那麼所撰寫的搜尋程式將如下:

Dim I = Array.IndexOf( 數學 , 100)

While I >= 0 ' 表示搜尋到資料

Response.Write ( 同學 (I) & "<P>" )

I = Array.IndexOf( 數學 , 100, I + 1)

End While

搜尋多筆資料搜尋多筆資料 (3)(3)

以上程式出現了兩個 以上程式出現了兩個 Array.IndexOfArray.IndexOf ,,而第二個 而第二個 Array.IndexOf Array.IndexOf 比第一個比第一個Array.IndexOf Array.IndexOf 多了一個參數:多了一個參數:

I = Array.IndexOf(數學, 100)I = Array.IndexOf(數學, 100, I + 1)

多了一個參數

二維陣列 二維陣列 (1)(1)

陣列也可以存放表格式的資料,例如:陣列也可以存放表格式的資料,例如:

第0行 第1行 第2行 第3行第0列 打擊者 長打率 上壘率 打擊率第1列 Bill 0.5 0.42 0.387

第2列 David 0.453 0.39 0.333

第3列 Norman 0.36 0.42 0.34

第4列 Walter 0.42 0.392 0.32

二維陣列 二維陣列 (2)(2)

以這個表格為例,計有 以這個表格為例,計有 5 5 列、列、 4 4 行,行,所以共有 所以共有 55××4 4 項資料,如果使用陣列項資料,如果使用陣列來儲存,則陣列寫成:來儲存,則陣列寫成:

Dim X(4, 3)

註標範圍:0~3註標範圍:0~4

列 行

二維陣列 二維陣列 (3)(3)

像這樣含有兩個註標的陣列,稱為像這樣含有兩個註標的陣列,稱為 二維二維陣列陣列 ,而存取二維陣列的資料也會使用,而存取二維陣列的資料也會使用到兩個註標,例如:到兩個註標,例如:

X(1, 2) = 0.42 ' 將第 1 列、第 2 行的資料指定成 0.42

Response.Write(X(3, 2)) ' 輸出第 3 列、第 2 行的資料

二維陣列 二維陣列 (4)(4)

如果我們將整個陣列的註標標示出來,如果我們將整個陣列的註標標示出來,則是:則是:

第0行 第1行 第2行 第3行第0列 (0,0) (0,1) (0,2) (0,3)

第1列 (1,0) (1,1) (1,2) (1,3)

第2列 (2,0) (2,1) (2,2) (2,3)

第3列 (3,0) (3,1) (3,2) (3,3)

第4列 (4,0) (4,1) (4,2) (4,3)

二維陣列資料的輸出二維陣列資料的輸出 (1)(1)

如果要對整個二維陣列的資料進行輸出,如果要對整個二維陣列的資料進行輸出,通常要使用 通常要使用 For-Next For-Next 巢狀迴圈,例如:巢狀迴圈,例如: Dim I, J

Dim X(4,3)For I = 0 To 4 Response.Write( "<BR>輸出第 " & I & "列資料<BR>" ) For J = 0 To 3 Response.Write( "(" & I & "," & J & ") = " ) Response.Write( X(I, J) & "<BR>" ) Next Next

二維陣列資料的輸出二維陣列資料的輸出 (2)(2) 程式以「列」為外迴圈,所以外迴圈每程式以「列」為外迴圈,所以外迴圈每執行一次,便輸出一橫列的資料。如果執行一次,便輸出一橫列的資料。如果以「行」為外迴圈,則外迴圈每執行一以「行」為外迴圈,則外迴圈每執行一次,便輸出一直行,程式如下:次,便輸出一直行,程式如下: Dim I, JDim X(4,3)For J = 0 To 3 Response.Write( "<BR>輸出第 " & J & " 行資料 <BR>" ) For I = 0 To 4 Response.Write( "(" & I & "," & J & ") = " ) Response.Write( X(I, J) & "<BR>" ) Next Next

練習練習 修改剛才的 修改剛才的 22D1.aspxD1.aspx ,,使其二維陣列輸使其二維陣列輸出成:出成:

多維陣列多維陣列 除了一維跟二維陣列之外,我們也可以除了一維跟二維陣列之外,我們也可以建立一個多維陣列,如下:建立一個多維陣列,如下:

例如: 例如:

Dim 陣列名稱(M, N, L, ¡K)

維數就看這裡有幾個註標

Dim Z(3, 4, 5, 6, 9) ‘ 宣告一個五維陣列 , 可儲存的資料數

' 共有 (3+1)(4+1)(5+1)(6+1)(9+1)=8400

4-2 4-2 副程式與函數副程式與函數

<<script> script> 標示標示 副程式與函數必須放在副程式與函數必須放在 <<script> script> 與與 </</script> script> 標示標示

之間,例如:之間,例如:

在在 <<script> script> 標 示 中 ,標 示 中 , Language Language 參 數 設 定 成參 數 設 定 成 ““ VB”VB” ,,表示其中的程式語言為 表示其中的程式語言為 VBVB,, runat runat 參數設參數設定成定成 “ “ server”server” ,,表示其中的程式將會在 表示其中的程式將會在 server server 端執端執行。行。

<script Language="VB" runat="server">

Sub 副程式X

‘ 在此撰寫副程式X的程式碼

End Sub

</script>

從「敘述區塊」到「副程式」從「敘述區塊」到「副程式」 (1)(1) 將敘述區塊轉換成副程式,先看以下程式:將敘述區塊轉換成副程式,先看以下程式:

<%Dim Name As StringDim score As IntegerName = "張無忌 "score = 51Response.Write( Name & ", " )If score >= 60 Then Response.Write( "你及格了 !" )ElseIf score >= 50 Then Response.Write( "你可以補考 !" )Else Response.Write( "你被當掉了 !" )End If

Response.Write( "<HR>" )%>

從「敘述區塊」到「副程式」從「敘述區塊」到「副程式」 (2)(2)<%Name = "張無忌 "score = 51Call IsScorePassedResponse.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>

副程式的呼叫與返回副程式的呼叫與返回 (1)(1)

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

<%Name = "張無忌"score = 51IsScorePassed ' 呼叫 IsScorePassed 副程式Response.Write( "<HR>" )%> 呼叫進入

返回

練習練習 將「將「 If week = 1 ThenIf week = 1 Then 」」與「與「 End IfEnd If 」」之間之間的敘述改成名稱為 的敘述改成名稱為 OutputWeekColor OutputWeekColor 的副的副程式:程式: <HTML><BODY>今天是:<%Dim WeekWeek = 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 IfResponse.Write( WeekdayName(Week) )Response.Write( "</FONT>" )%></BODY></HTML>

帶有參數的副程式帶有參數的副程式 (1)(1)

會決定副程式執行結果的變數,通常把會決定副程式執行結果的變數,通常把它設定成副程式的參數,如下:它設定成副程式的參數,如下:

Sub IsScorePassed( Name, score ) Response.Write(Name & ", ") If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End IfEnd Sub

Name = "張無忌"score = 51IsScorePassed(Name, score )

副程式所做的修改 呼叫程式所做的修改

帶有參數的副程式帶有參數的副程式 (2)(2)<%Dim Name As StringDim score As Integer Name = "張無忌 "score = 51IsScorePassed( 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>

帶有參數的副程式帶有參數的副程式 (3)(3) 修改的過程是:修改的過程是:11.. 副程式的修改部分副程式的修改部分:將關鍵性的變數取:將關鍵性的變數取出,將其放在出,將其放在 ( ) ( ) 裡面,然後擺在副程裡面,然後擺在副程式名稱之後。式名稱之後。

22.. 呼叫端的修改部分呼叫端的修改部分:將呼叫之前所需設:將呼叫之前所需設定的變數定的變數 (( 本例是 本例是 Name Name 及 及 score )score ) 串串在副程式名稱之後。在副程式名稱之後。

帶有參數的副程式帶有參數的副程式 (4)(4)<%IsScorePassed( "張無忌 ", 51 )Response.Write( "<HR>" )IsScorePassed( "王國榮 ", 80 )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>

實例實例 (1)(1)

有有兩個陣列兩個陣列如下:如下:

分 別 記 錄 著 三 年 甲 班 同 學 的 姓 名 及 分 別 記 錄 著 三 年 甲 班 同 學 的 姓 名 及 ASP.NET ASP.NET 的學期分數:的學期分數:

Dim 姓名 () = { “陳桶一” , “黃光權” , “胡生妙” , “王為全” , _ “李日正” , “劉德菖” , “ 方正一” , “劉康寶” , _ "謝掬花 ", "王美蘭 ", "徐小噹 ", "葉小毛 "}Dim 分數 () = {90, 58, 41, 95, 59, 28, 98, 0, 95, 41, 91, 0 }

實例實例 (2)(2)

請逐一讀取每一位同學的姓名及分數,請逐一讀取每一位同學的姓名及分數,然後呼叫 然後呼叫 IsScorePassed IsScorePassed 副程式,顯示出副程式,顯示出以下網頁:以下網頁:

實例實例 (3)(3)

所撰寫的程式如下:所撰寫的程式如下:Dim I

For I = 0 To UBound(姓名 )

IsScorePassed( 姓名 (I), 分數 (I) )

Response.Write( "<BR>" )

Next

練習練習 (1)(1)

三年甲班同學的「姓名、三年甲班同學的「姓名、 BCC BCC 學期成績、學期成績、ASP ASP 學期成績、學期成績、 VB 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 }

練習練習 (2)(2) 寫一含有四個參數的 寫一含有四個參數的 CalcScore CalcScore 副程式,所副程式,所

傳 入 之 參 數 分 別 為 傳 入 之 參 數 分 別 為 Name(Name( 姓 名姓 名 )) 、 、 BCC(BCC BCC(BCC 學期成績學期成績 )) 、、 ASP (ASP ASP (ASP 學期成學期成績績 )) 及 及 VB(VB VB(VB 學期成績學期成績 )) ,而副程式在接,而副程式在接收到這四個參數之後,須輸出以下的 收到這四個參數之後,須輸出以下的 HTML HTML 格式:格式:<TR><TD>Name</TD><TD>BCC</TD><TD>ASP</TD><TD>VB</TD><TD> 總成績 </TD><TD> 平均分數 </TD></TR>

練習練習 (3)(3)

最後再呼叫此一副程式,輸出以下表格:最後再呼叫此一副程式,輸出以下表格:

函數函數 ((Function)Function)

函數是另一種特殊形式的副程式,這種函數是另一種特殊形式的副程式,這種副程式有的存在於 副程式有的存在於 VB VB 的語言系統裡,的語言系統裡,稱為稱為內建函數內建函數,我們曾經使用過的 ,我們曾經使用過的 NowNow、、 DatePartDatePart、、 WeekdayNameWeekdayName 、、 Cint Cint 都是 都是 VBVB 的內建函數,而另一種函數則的內建函數,而另一種函數則可以像副程式一樣由我們自己定義,稱可以像副程式一樣由我們自己定義,稱為為自定函數。自定函數。

從副程式到函數從副程式到函數 唯一的差別只是將 唯一的差別只是將 Sub Sub 保留字改成保留字改成

Function Function 保留字,其他地方都沒有改變。保留字,其他地方都沒有改變。

Function IsScorePassed(Name, score) Response.Write( Name & ", " ) If score >= 60 Then Response.Write( "你及格了 !" ) ElseIf score >= 50 Then Response.Write( "你可以補考 !" ) Else Response.Write( "你被當掉了 !" ) End IfEnd Function

傳回值傳回值

以上的 以上的 Now Now 及 及 Cint Cint 都是 都是 VB VB 的內建的內建函數,其特色都是在被呼叫之後,會傳回函數,其特色都是在被呼叫之後,會傳回某一份資料某一份資料 (( 例如 例如 Now Now 函數傳回系統時函數傳回系統時間間 )) ,這份被傳回的資料就稱傳回值。,這份被傳回的資料就稱傳回值。

T = Now ' Now函數的傳回值為系統時間ASP = Request("ASP")V = CInt(ASP) ' CInt函數的傳回值是一個整數

設定傳回值的語法設定傳回值的語法 如何讓函數真的能傳回值呢?方法是在如何讓函數真的能傳回值呢?方法是在函數結束執行之前,執行以下敘述:函數結束執行之前,執行以下敘述:

Return 欲傳回的值

實例一實例一 (1)(1)

寫一 寫一 f(X) = X^2 + 2*X + 1 f(X) = X^2 + 2*X + 1 的函數的函數

由於我們希望函數能夠傳回 由於我們希望函數能夠傳回 X^2 + 2*X + 1 X^2 + 2*X + 1 運算式的結果,所以便撰運算式的結果,所以便撰寫 寫 ReturnReturn X^2 + 2*X + 1 X^2 + 2*X + 1 」」將將X^2 + 2*X + 1 X^2 + 2*X + 1 運算的結果指定成函數 運算的結果指定成函數 f f 的傳回值。的傳回值。

Function f(X)

Return X^2 + 2*X + 1

End Function

實例一實例一 (2)(2)

呼叫 呼叫 f f 函數的例子:函數的例子: ((Fun1.aspx)Fun1.aspx)

Dim A = f(3) ' 呼叫 f, 傳入 3 為參數 , 結果傳回 3^2 + 2*3 + 1Response.Write( "A = " & A & "<P>" ) ' 輸出結果 : 16

Dim V = 2Dim B = f(V) ' 呼叫 f, 傳入變數 V 為參數 , 結果傳回 V^2 + 2*V + 1Response.Write( "B = " & B & "<P>" ) ' 輸出結果 : 9

實例二實例二 (1)(1)

寫一 寫一 Sum(N) = 1+2+Sum(N) = 1+2+……+N +N 的函數。的函數。

實例二實例二 (2)(2) Fun2.aspxFun2.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>

練習練習 寫一函數傳入 寫一函數傳入 11~~ 1212 ,然後傳回,然後傳回對應的中文月份,例如傳入 對應的中文月份,例如傳入 8 8 即傳即傳回回 ""八月八月 "" 。。

4-3 4-3 VB VB 內建函數的實際應用內建函數的實際應用

字串類型函數字串類型函數

用 用 UCase/LCase UCase/LCase 函數避免大小寫問題。函數避免大小寫問題。 用 用 Trim Trim 函數除去不必要的空白字元。 函數除去不必要的空白字元。      用 用 Join Join 函數簡化陣列資料的輸出函數簡化陣列資料的輸出 Split Split 函數與重複性資料的輸入。 。函數與重複性資料的輸入。 。 Replace Replace 函數與字串的取代函數與字串的取代。。

UCase/Lcase (1)UCase/Lcase (1)

用用 UCase/LCase UCase/LCase 函數避免大小寫問題函數避免大小寫問題 。 。 將字串轉成大寫及小寫的函數分別是將字串轉成大寫及小寫的函數分別是

Ucase Ucase 及及 CaseCase ,,使用例如下:使用例如下:

Name = Request("Name") ' 假設 Name參數值等於 "Asp"Response.Write(UCase(Name)) ' 輸出 : ASPResponse.Write(LCase(Name)) ' 輸出 : asp

UCase/Lcase (2)UCase/Lcase (2) NameExp2.aspNameExp2.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%>

Trim (1)Trim (1) 用用 Trim Trim 函數除去不必要的空白字元。函數除去不必要的空白字元。

們在撰寫程式時,要主動除去不必要的們在撰寫程式時,要主動除去不必要的空白字元,此時須使用 空白字元,此時須使用 Trim Trim 函數,用函數,用法如下:法如下:

而 而 NameExp2.aspx NameExp2.aspx 經修改之後成為:經修改之後成為: X = Trim(" ASP") ' 結果 X = "ASP"

Dim data = Request("Name")data = Trim(data) ' 新增此一敘述Dim I = Array.IndexOf( 名詞 , UCase(data) )

Trim (2)Trim (2) NameExp3.aspxNameExp3.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%>

JoinJoin

用用 Join Join 函數簡化陣列資料的輸出。函數簡化陣列資料的輸出。 Join Join 函數的特色是可以將陣列的所有元函數的特色是可以將陣列的所有元素串在一起,並且在陣列元素之間插入素串在一起,並且在陣列元素之間插入某一特定字串或字元,例如:某一特定字串或字元,例如:

結果 結果 X X 等於等於 ""F8308F8308<P><P>F8315F8315<P><P>F8316F8316<P><P>FF8317"8317" 。。

Dim Arr() = {"F8308", "F8315", "F8316", "F8317"}Dim X = Join(Arr, "<P>")

Join Join 實例實例 (1)(1)

有一陣列如下:有一陣列如下:

希望將此一陣列輸出成:希望將此一陣列輸出成:

Dim Books() = { _ "F8308 VB6 與 Windows API 講座 ", "F8315 新觀念的 VB6 教本 ", _ "F8316 VB6 實戰講座 ", "F8317 VB6 資料庫程式設計 " }

Join Join 實例實例 (2)(2)

如果不使用 如果不使用 Join Join 函數,而使用 函數,而使用 For For 迴迴圈 , 則 此 一 圈 , 則 此 一 ASP ASP 程 式 如 下 :程 式 如 下 :((Books01.aspx)Books01.aspx)<%Dim Books() = { _ "F8308 VB6 與 Windows API 講座 ", "F8315 新觀念的 VB6 教本 ", _ "F8316 VB6 實戰講座 ", "F8317 VB6 資料庫程式設計 " } Response.Write( "學 VB 找王國榮系列叢書 <HR>" )Response.Write( "<UL>" )Dim IFor I = 0 To UBound(Books) Response.Write( "<LI>" & Books(I) )NextResponse.Write( "</UL>" )%>

Join Join 實例實例 (3)(3)

如果使用 如果使用 Join Join 函數,則程式將更簡單,函數,則程式將更簡單,以上粗體字的程式可修改成以上粗體字的程式可修改成 : :

Response.Write( "<UL><LI>" & Join(Books, "<LI>") & "</UL>" )

Join Join 實例實例 (4)(4)

Books02.aspBooks02.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>" )

%>

SplitSplit (1) (1) Split Split 函數與重複性資料的輸入函數與重複性資料的輸入 。 。

其意義是輸入兩份資料,而兩份資料都其意義是輸入兩份資料,而兩份資料都是以 是以 Book Book 為參數,另一方面讀取資料為參數,另一方面讀取資料的方法還是使用 的方法還是使用 RequestRequest 物件。物件。

資料之間以資料之間以 “ “ ,” ,” 分隔,分隔,使用 使用 Split Split 函數函數最為簡便,例如:最為簡便,例如:

Dim Book = Request("Book")Dim BookList = Split(Book, ",")' BookList 變成陣列 , BookList(0) = "F8308", BookList(1) = "F8315"

http://localhost/kjaspx/ch04/SplitEx.aspx?Book=F8308&Book=F8315

SplitSplit (2) (2) 假設我們想把網頁輸出成:假設我們想把網頁輸出成:

SplitEx.aspxSplitEx.aspx <%Dim Book = Request( "Book" )Dim BookList = Split(Book, ",") Response.Write( "您想購買的書有: " ) Response.Write( "<UL><LI>" & Join(BookList, "<LI>") & "</UL>" )%>

Replace(1)Replace(1)

Replace Replace 函數與字串的取代函數與字串的取代 。 。

使用 使用 Split Split 及 及 Join Join 兩個函數,其實使兩個函數,其實使用一個 用一個 Replace Replace 函數就可以完成。函數就可以完成。

Dim BookList = Split(Book, ",")Response.Write( "<UL><LI>" & Join(BookList, "<LI>") & "</UL>" )

Response.Write( "<UL><LI>" & Replace(Book, ",", "<LI>") & "</UL>" )

Replace(2)Replace(2)

Replace.aspxReplace.aspx

<%

Dim Book = Request( "Book" )

Response.Write( "您想購買的書有: " )

Response.Write( "<UL><LI>" & Replace(Book, ",", "<LI>") & "</UL>" )

%>

數值類型函數數值類型函數 FormatNumber FormatNumber 函數與數值的輸出。函數與數值的輸出。 利用 利用 Val Val 轉換數值資料。轉換數值資料。 Rnd Rnd 函數與亂數遊戲函數與亂數遊戲。。

FormatNumberFormatNumber (1) (1) FormatNumber FormatNumber 函數與數值的輸出函數與數值的輸出 。 。 將下圖將下圖 (( 左左 )) 改成下圖改成下圖 (( 右右 )) ,「平均」,「平均」

欄位採四捨五入方式取小數點兩位,如欄位採四捨五入方式取小數點兩位,如何撰寫呢?何撰寫呢?

FormatNumber(2)FormatNumber(2)

要採四捨五入方式取固定位數的小數須要採四捨五入方式取固定位數的小數須使用 使用 FormatNumber FormatNumber 函數,使用方法如函數,使用方法如下:下:

例如:例如:

X = FormatNumber(數值 , 所取之小數點位數 )

Dim X = FormatNumber(60.6666666666667, 2)Response.Write( X ) ' 輸出 : 60.67

FormatNumber(3)FormatNumber(3) SubTab02.aspxSubTab02.aspx Part I 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>" )

 

FormatNumber(4)FormatNumber(4) SubTab02.aspxSubTab02.aspx Part II 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>" )

%> 

FormatNumber(5)FormatNumber(5) SubTab02.aspxSubTab02.aspx Part III 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>

ValVal

利用利用 Val Val 轉換數值資料轉換數值資料 。 。 試著輸入以下的參數:試著輸入以下的參數: ((BCCBCC 、、 ASPASP 、、及及 VBVB 的成績都輸入為的成績都輸入為 59.5)59.5)Total = Total = ValVal(BCC) + (BCC) + ValVal(VB) + (VB) + ValVal(ASP)(ASP)

Val Val 的用途是將資料轉換成「實數」,的用途是將資料轉換成「實數」,例如 例如 "59.5" "59.5" 經轉換之後,會變成 經轉換之後,會變成 59.559.5 ,,不會四捨五入。不會四捨五入。

Rnd(1)Rnd(1)

Rnd Rnd 函數與亂數遊戲。函數與亂數遊戲。 利用 利用 Rnd Rnd 產生亂數,只能產生 產生亂數,只能產生 0≦0≦且<且< 1 1 的亂數,但可利用以下方法,讓的亂數,但可利用以下方法,讓它產生 它產生 00~~ N-1 N-1 之間的整數: 之間的整數:

Rnd(2)Rnd(2)

為什麼 為什麼 Fix(Rnd*N) Fix(Rnd*N) 可以產生 可以產生 00~~ N-1 N-1 之間的整之間的整數呢?數呢?

假設 假設 N N 等於 等於 33 ,則 ,則 00≦≦ Rnd*3Rnd*3<< 33 ,,而 而 Fix Fix 函函數的作用是去掉小數留下整數,所以:數的作用是去掉小數留下整數,所以:若 若 0≦0≦Rnd*3Rnd*3<< 11,,則經 則經 Fix Fix 轉換後會變成 轉換後會變成 00。。 若 若 1≦1≦Rnd*3Rnd*3<< 22,,則經 則經 Fix Fix 轉換後會變成 轉換後會變成 11 。。

1.1. 若 若 22≦≦ Rnd*3Rnd*3<< 33 ,,則經 則經 Fix Fix 轉換後會變成 轉換後會變成 22 。。 Fix(Rnd*3) Fix(Rnd*3) 可能產生的值為 可能產生的值為 00 、、 11 、或 、或 2(2( 等於等於 3-1 3-1

= = N-1)N-1) 。。依此推論,依此推論, Fix(Rnd*N) Fix(Rnd*N) 會產生 會產生 00、、 1…1…N-1 N-1 之中的一個亂數之中的一個亂數。。

Rnd Rnd 實例實例 P.192 (1)P.192 (1)

寫一個可以擲出三個骰子的網頁。寫一個可以擲出三個骰子的網頁。

Rnd Rnd 實例實例 P.192 (2)P.192 (2)

dice.aspxdice.aspx <%Dim D1 = Fix(Rnd * 6) + 1

Dim D2 = Fix(Rnd * 6) + 1

Dim D3 = 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>

Rnd Rnd 實例實例 P.193 (1)P.193 (1)

寫一個樂透彩的電腦選號網頁。寫一個樂透彩的電腦選號網頁。

Rnd Rnd 實例實例 P.193 (2)P.193 (2) lotto.aspxlotto.aspx Part I Part I

#01 <H2>樂透彩 -- 電腦選號 <HR></H2>

#02 <%

#03 Dim Num() = { "01", "02", "03", "04", "05", "06", "07", _

#04 "08", "09", "10", "11", "12", "13", "14", _

#05 "15", "16", "17", "18", "19", "20", "21", _

#06 "22", "23", "24", "25", "26", "27", "28", _

#07 "29", "30", "31", "32", "33", "34", "35", _

#08 "36", "37", "38", "39", "40", "41", "42" }

#09 Dim Selected(5)

#10 Dim I, K, D

#11

#12

Rnd Rnd 實例實例 P.193 (3)P.193 (3)

lotto.aspxlotto.aspx Part II 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>

日期時間類型函數日期時間類型函數 用 用 YearYear 、、 Month Month 及 及 Day Day 函數自設日期函數自設日期

格式。格式。 用 用 HourHour 、、 Minute Minute 及 及 Second Second 函數自設函數自設

時間格式。時間格式。 用 用 DateAdd DateAdd 函數計算使用期限。函數計算使用期限。 用 用 DateDiff DateDiff 函數計算時間差。函數計算時間差。

用用 YearYear、、 Month Month 及及 Day Day 函函數自設日期格式數自設日期格式 (1)(1)

用用 YearYear、、 Month Month 及及 Day Day 函函數自設日期格式數自設日期格式 (2)(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>

用用 HourHour、、 Minute Minute 及及 Second Second 函數自設時間格式函數自設時間格式 (1)(1)

用用 HourHour、、 Minute Minute 及及 Second Second 函數自設時間格式函數自設時間格式 (2)(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>

用用 DateAdd DateAdd 函數計算使用期限函數計算使用期限(1)(1)

如果您經營一個收費網站,而提供給試如果您經營一個收費網站,而提供給試用者的試用期為 用者的試用期為 60 60 天,那麼如何在試天,那麼如何在試用者申請時,告訴他可以使用到哪一天用者申請時,告訴他可以使用到哪一天呢?呢?

方法是讀取當時的系統日期方法是讀取當時的系統日期 (( 呼叫 呼叫 Now Now 函數函數 )) ,然後利用,然後利用 DateAdd DateAdd 函數加上 函數加上 6060 天:天:

Dim D = DateAdd( "d", +60, Now )Response.Write("謝謝您 , 您可以試用到 " & ChineseDate(D))

用用 DateAdd DateAdd 函數計算使用期限函數計算使用期限(2)(2)

用用 DateAdd DateAdd 函數計算使用期限函數計算使用期限(3)(3)

如果您想改以如果您想改以 “ “月月” ” 為使用的單位,為使用的單位,則是將 則是將 DateAdd DateAdd 函數的前兩個參數改函數的前兩個參數改成:成: ""m" m" 及及 +2+2 ,如下:,如下:

Dim D = DateAdd( "m", +2, Date )Response.Write("謝謝您 , 您可以試用到 " & ChineseDate(D))

用用 DateDiff DateDiff 函數計算時間差函數計算時間差 (1)(1)

用用 DateDiff DateDiff 函數計算時間差函數計算時間差 (2)(2)

如果我們想製作含有「距離公元如果我們想製作含有「距離公元 20102010 年年還有還有 ?????? ?????? 秒」的網頁,大概非使用秒」的網頁,大概非使用 DateDiff DateDiff 函數不可,過程是讀取目前的函數不可,過程是讀取目前的系統日期時間,然後與系統日期時間,然後與 #01/01/2010 00:#01/01/2010 00:00:00# 00:00# 進行秒數差的計算,所撰寫的程進行秒數差的計算,所撰寫的程式如下:式如下:

S = DateDiff( "s", Now, #01/01/2010 00:00:00# )

用用 DateDiff DateDiff 函數計算時間差函數計算時間差 (3)(3)

如果要計算 ‘天’ 數,則是將 如果要計算 ‘天’ 數,則是將 DateDiff DateDiff 的第一個參數由 的第一個參數由 ""s" s" 改成 改成 ""d"d"::

S = DateDiff( "d", Now, #01/01/2010 00:00:00# )

用用 DateDiff DateDiff 函數計算時間差函數計算時間差 (4)(4)

Y2010.aspx Y2010.aspx 完整範例如下:完整範例如下:<%Response.Write( "距離公元 2010年還有: <UL>" ) Dim S = DateDiff( "s", Now, #01/01/2010 00:00:00# )Response.Write( "<LI>" & S & " 秒 " ) S = DateDiff( "d", Now, #01/01/2010 00:00:00# )Response.Write( "<LI>" & S & " 天 " ) Response.Write( "</UL>" )%>

Recommended