2 장. ASP 를위한 VBScript 정보처리학과서보원교수
목차 서버스크립트 VBScript 변수 연산자 배열 제어문및반복문 프로시저 문자열함수 1
스크립트언어 간단한프로그래밍언어 인터프리트언어와유사한특성을갖고있음 Script 언어 vs. Programming 언어 표현력 용도난이도 스크립트언어 제한적특정용도쉬움 프로그래밍언어 풍부범용적어려움 VBScript ASP 에서사용하는스크립트언어 2
클라이언트스크립트해석과정 (abc.asp) 문서요청 (abc.asp) 문서제공 (abc.asp) HTML 태그를해석하여결과를출력하고, <Script> 태그를만나면스크립트코드를해석한다. 3
서버스크립트해석과정 (abc.asp) 서버스크립트코드가있으면스크립트해석기 (ASP.DLL) 가스크립트코드를해석하여 HTML 코드로변환한다. 문서요청 (abc.asp) 문서제공 (abc.asp) ASP 프로그램에서는주로서버스크립트로 VBScript, 클라이언트 스크립트로 JavaScript 를사용한다. 4
서버스크립트를사용하려면? VBScript HTML 코드에삽입해서사용 <Script>~</Script> 사이에코드를작성 <Script> 태그는 HTML 코드중간에임의의위치에여러번사용가능 VBScript 를사용하는방법 <Script> 태그를이용 <Script language=vbscript runat=server> VBScript 코드 </Script> <% %> 사용 예 ) <% =i %> 5 language : 스크립트언어의종류디폴트값 : JavaScript runat : 해석되는위치를지정 서버스크립트인경우에사용할수있다.
변수 변수란? 값을저장하기위해이름이부여된기억공간 변수의구성 이름 데이터형식 변수의사용 값예 ) intage = 20 변수이름 데이터형식은? 명시적선언 : Dim 명령을사용 묵시적선언 : 별도의선언없이필요할때사용 예 intage = 20 intnextage = intage + 1 intnextage 의값은? 값 6
변수명명규칙 영문자, 숫자, _ 를사용 첫글자는영문자로시작 마침표, 느낌표등특수문자는불가 글자수 255개이하 예 Var, tel_123, 119fire, bip*3 상수 값이한번정해지면변하지않는수 Const : 상수를정의할수있다. 예 ) Const Pi = 3.141592 7
Dim 문 명시적변수선언시사용 예 Dim intage Dim intnextage intage = 10 intnextage = intage + 1 Dim 선언시변수는기본값을가짐 숫자 : 0 문자열 : 길이가 0인빈문자열 8
Dim 문 Dim 필요성 intage = 10 intnextage = inage + 1 intnextage 의값? Option Explicit 명시적으로변수를선언하도록할때사용 문서의맨처음에위치시켜야한다. 만약변수를명시적으로선언하지않으면에러가발생한다. 9
예제 Ex2-1.asp( 교재 47 페이지 ) <%Option Explicit %> <html> <body> <% %> Dim intage Dim intnextage intage = 10 intnextage = inage + 1 변수 inage 를선언하지않아서에러가발생한다. </body> </html> 10
변수의데이터형식 Variant VBScript 에서지원하는유일한데이터형식 정수, 부동소수, 문자열등의하위형식을가짐 Variant의하위형식 Integer(2) 정수 Long(4) 정수 Byte(1) 양의정수 Single(4) 실수 Double(8) 실수 String 문자열 Boolean(True, False) 기본값은 False Date # 와 # 사이에날짜나시간을넣어사용 Empty 값이할당되지않은상태 ( 기본값을저장 ) 11 Variant 형의변수는저장된데이터의종류에맞게자동으로하위형식으로변환된다.
자료형관련함수 typename() 변수의하위형식을알고싶을때사용 typename() 함수는변수의하위형식을반환 하위형식변환함수 변환함수 변환자료형 변환함수 변환자료형 Cbool() Boolean Cint() Integer Cbyte() Byte CLng() Long Cdate() Date CSng Single CDbl() Double CStr String 12
예제 Ex2-1.asp( 교재 47 페이지 ) <h2> 변수의하위형식 : typename() </h2> <% Dim intage Dim strname Dim strzip Dim datbirth Dim dblweight intage = 20 strname = " 이동양 " strzip = "152-714" datbirth = #4/20/81 12:20:30# dblweight = 64.7 %> <p> <% =intage %> <% =" : " %> <% =typename(intage typename(intage) %> <br br> <% =strname %> <% =" : " %> <% =typename(strname typename(strname) %> <br br> <% =strzip %> <% =" : " %> <% =typename(strzip typename(strzip) %> <br br> <% =datbirth %> <% =" : " %> <% =typename(datbirth typename(datbirth) %> <br br> <% =dblweight %><% =" : " %> <% =typename(dblweight typename(dblweight) %> <br br> 13
연산자 할당연산자 (=) 변수에어떤값을할당할때사용 = 기호를사용 예 inta = 10 intb = inta intb = intb + 5 14
연산자 산술연산자 사칙연산 : +, -, *, / 지수연산 : ^ 지수승 2^3? 2 3 \ 나눗셈후정수몫을돌려줌 20\3? Mod 나눗셈후나머지를돌려줌 20 mod 3? 15
<% 예제 Ex2-4.asp(58 페이지 ) intno1 = 7 intno2 = 2 subres = intno1 - intno2 mulres = intno1 * intno2 divres = intno1 / intno2 powres = intno1 ^ intno2 intdivres = intno1 \ intno2 modres = intno1 Mod intno2 %> <p> <% =intno1 %> - <% =intno2 %> = <% =subres %><br> <% =intno1 %> * <% =intno2 %> = <% =mulres %><br> <% =intno1 %> / <% =intno2 %> = <% =divres %><br> <% =intno1 %> ^ <% =intno2 %> = <% =powres %><br> <% =intno1 %> \ <% =intno2 %> = <% =intdivres %><br> <% =intno1 %> Mod <% =intno2 %> = <% =modres %><br> 2^3^4 = <% =2^3^4 %> 16
예제 숫자와문자열의덧셈 <% int1 = 200 str1 = "50" %> [ 숫자형인경우 ] <br> int1 + int1 = <%= int1 + int1 %> <br><br> [ 문자열인경우 ] <br> str11 + str12 = <%= str1 + str1 %><br><br> [ 숫자와문자열인경우 ] <br> int11 + str11 = <%= int1 + str1 %><br><br> [ 데이터형을변환하는경우 ] <br>cstr(int1) + str1 = <%= CStr(int1) + str1 %> <br>int1 + CInt(str1) = <%= int1 + CInt(str1) %> </BODY> </HTML> 17
연산자 비교연산자 두개의변수나식의크기를비교 결과는 True 또는 False 를갖는다 문자열비교는 ASCII 코드값을기준으로한다. 문자열과수식의비교시문자열이큰것으로판단 연산자 = 같다 <> 같지않다 < 작다 > 크다 <= 작거나같다 >= 크거나같다 18 기능
예제 Ex2-5.asp(59 페이지 ) <% intno1 = 7 intno2 = 2 intno3 = Empty string1 = "Good" string2 = "Bad" string3 = "bad" string4 = Empty %> <p> <table border=0> <tr><td> <% =intno1 %> > <% =intno2 %> <td> => <td> <% =(intno1 > intno2) %><br> <tr><td> <% =intno1 %> < <% =intno3 %> <td> => <td> <% =(intno1 < intno2) %><br> <tr><td> <% =intno1 %> >= <% =string1 %> <td> => <td> <% =(intno1 >= string1) %><br> <tr><td> <% =intno3 %> <= <% =intno2 %> <td> => <td> <% =(intno3 <= intno2) %><br> <tr><td> <% =string2 %> <> <% =string3 %> <td> => <td> <% =(string2 <> string3) %><br> <tr><td> <% =intno3 %> = <% =string3 %> <td> => <td> <% =(intno3 = string3) %><br> <tr><td> <% =string1 %> > <% =string2 %> <td> => <td> <% =(string1 > string2) %><br> </table> 19
연산자 논리연산자 Boolean형식 True 또는 False 값을가짐 And, Or, Not, Xor 연산자 And Or Not Xor 숫자에대한논리 연산은비트연산 으로처리한다. 20 기능 두개의값이모두 True 인경우만 True 하나이상이 True 이면 True True 는 False 로, False 는 True 로변환 값이서로다른경우에 True
예제 Ex2-6.asp(63 페이지 ) <% blnval1 = True blnval2 = False intval1 = 2 intval2 = 3 %> <p> <table border=0> <tr><td> <% =blnval1 %> And <% =blnval2 %><td> => <td><% =blnval1 And blnval2 %><br> <tr><td> <% =blnval1 %> Or <% =blnval2 %> <td> => <td> <% =blnval1 Or blnval2 %><br> <tr><td> Not <% =blnval2 %> <td> => <td> <% =Not blnval2 %><br> <tr><td> <% =intval1 %> And <% =intval2 %> <td> => <td> <% =intval1 And intval2 %><br> <tr><td> <% =intval1 %> Or <% =intval2 %> <td> => <td> <% =intval1 Or intval2 %><br> </table> 21
연산자 연결연산자 & 예 String1 = Good String2 = Morning! Morning! StrRes = String1 & String2 StrRes 변수값은? Good Morning! 22
연산자우선순위 산술 > 연결 > 비교 > 논리 > 할당연산자순 P.66 [ 표2.4] 참조 예제 3 > 2 and 7 <=5 or 4 = 2? 3 * 4 > 4-1 and 3 <= 3? 23
배열 연속적인기억공간을갖는변수 같은이름으로접근이가능 반드시명시적으로선언한후에사용 색인 (index) 번호를이용 효율적으로값을참조 Dim arrcol(9) 10 개의배열요소를가짐 arrcol(0), arrcol(1),, arrcol(9) 반복루프를사용하여코드작성이쉽고간단 For i = 0 to 9 sum = sum + arrcol(i) Next 색인값은 0 부터시작 24
배열 값할당은변수처럼 arrcol(0) = white arrcol(1) = 1234 다차원배열 DimArrTable(2,3) arrtable(0,0) arrtable(0,1) arrtable(0,3) 각배열요소별로다른종류의하위형식을가질수있다. 행의크기 열의크기 arrtable(1,0) arrtable(2,0) 25
배열 1 2 3 4 5 6 7 8 9 10 11 12 2 행의모든값을더하는코드 Dim arrtable(2,3) Dim sum sum = 0 For i = 0 to 3 sum = sum + arrtable(1, i) Next 26
예제 - 배열처리 <% Dim arrtable(2,3), sum, k For i = 0 To 2 For j = 0 To 3 k = k + 1 arrtable(i, j) = k Next Next sum = 0 For i = 0 to 3 sum = sum + arrtable(2, i) Next Response.Write "sum = " & sum & "<br>" %> 27
동적배열 실행중에배열크기를정하는경우에사용 ReDim 명령을사용 Dim arr() ReDim arr(3) ReDim arr(10) 이전배열값을유지하는방법 Preserve 명령을사용 예 ) ReDim Preserve arr(4) arr 배열의크기를지정한다. arr 배열의크기를변경한다. 28
제어문 if~then if 조건식 then 조건이 true 인경우 end if if~then~else if 조건식 then 조건이 true 인경우 else 조건이 false 인경우 end if 29
예제 Ex2-7.asp(71 페이지 ) <h2> 제어문 if-then, if-then-else </h2> <% boolval1 = True boolval2 = False intval1 = 10 intval2 = 20 intval3 = 30 if intval1 <= intval2 then Response.write "intval2 가 intval1 보다크거나같다 <br>" end if if boolval2 then Response.write " 조건식은 True 이다 " else Response.write " 조건식은 False 이다 " end if %> 30
예제 -elseif <% intval1 = 10 intval2 = 20 intval3 = 30 if intval1 = intval2 then Response.write "intval1과 intval2는같다 " elseif intval1 = intval3 then Response.write "intval1과 intval3은같다 " else Response.write "intval1과같지않다 " end if %> 31
제어문 Select case 문 Select case 검사식 Case 결과1 실행1 Case 결과2, 결과3 실행2 Case else 실행3 End Select 주로조건식이여러개나오는경우에사용한다. 32
예제 Ex2-8.asp(73 페이지 ) <h2> 제어문 select case </h2> <% grade = 84 select case (grade \ 10) case 9, 10 Response.write " 성적은 A 입니다 " case 8 Response.write " 성적은 B 입니다 " case 7 Response.write " 성적은 C 입니다 " case 6 Response.write " 성적은 D 입니다 " case 5,4,3,2,1,0 Response.write " 성적은 F 입니다 " case else Response.write " 잘못입력된성적입니다 " end select %> 33
반복문 4 가지반복문 While Wend Do Loop For Next For each next 중첩가능 for i = 1 to 5 do for j = 1 to 4 do next next sum = i + j 34
반복문 While 조건식 Wend 조건식이 True 인경우반복수행 Do Loop Do While 조건식 Loop Do Loop While 조건식 Do Until 조건식 Loop Do Loop Until 조건식 35 While Wend 와동일하게동작한다. 먼저반복문을실행하고 While 의조건식을검사한다. 조건식이 True 가될때까지반복한다. 먼저반복문을실행하고 Until 의조건을검사해서 True 가될때까지반복한다.
예제 Ex2-9.asp(75 페이지 ) <h2> 반복문 While... Wend </h2> <% intcnt = 1 intsum = 0 while intcnt <= 10 intsum = intsum + intcnt if intcnt = 1 then Response.write intcnt & " " else Response.write "+ " & intcnt & " " end if intcnt = intcnt +1 wend Response.write "= " & intsum %> 36
반복문 For Next 반복횟수를알고있는경우 강제로빠져나오려면 exit for를사용 For index= 시작값 to 종료값 step 증감실행문 Next 37
예제 Ex2-11.asp(80 페이지 ) <h2> 반복문 For...Next </h2> <% intsum = 0 For intcnt = 1 to 10 step 2 intsum = intsum + intcnt if intcnt = 1 then Response.write intcnt & " " else Response.write "+ " & intcnt & " " end if Next Response.write "= " & intsum & "<br>" %> 38
반복문 For Each Next 배열이나객체컬렉션값을이용하는경우에는값의개수를미리알수없기때문에유용하게사용할수있다. For Each 요소 in 객체실행문 Next 39
예제 Ex2-12.asp(82 페이지 ) <h2> 반복문 For Each...Next </h2> <% Dim arrdata(9) ' arrdata(0) =1, arrdata(1) = 2..., arrdata(9) = 10 For intcnt = 1 to 10 arrdata(intcnt-1) = intcnt Next For Each intval in arrdata intsum = intsum + intval Response.write intval & "+ " Next Response.write "= " & intsum & "<br>" %> 40
프로시저 프로시저? 반복되는기능을하나의모듈로모아놓은것 서브루틴 : 반환값이없는프로시저 함수 : 반환값이있는프로시저 서브루틴 Sub 서브루틴이름 ( 매개변수 ) End Sub 함수 Function 함수이름 ( 매개변수 ) 함수이름 = 반환값 End Function 41
예제 Ex2-13.asp(83 페이지 ) <h2> 프로시저 - 서브루틴, 함수 </h2> <% Sub print(val) Response.write val & " " End Sub Function funcsum(val1, val2) funcsum = val1 + val2 End Function intsum = 0 For intcnt = 1 to 10 Next intsum = funcsum(intsum, intcnt) if intcnt = 1 then print(intcnt) else Response.write "+ " & intcnt & " " end if Response.write "= " & intsum & "<br>" %> 42
문자열함수 Left(), Right(), Mid() 함수 Left() Len() () 안에있는문자열의길이를구한다. Trim, ltrim(), rtrim() 기능 왼쪽에서 () 안의숫자만큼문자열을가져온다 Right() 오른쪽에서 () 안의숫자만큼문자열을가져온다. Mid() 가운데서 () 안의숫자만큼문자열을가져온다. 함수 기능 Trim() 양쪽에있는공백을제거한다. ltrim() 왼쪽에있는공백을제거한다. rtrim() 오른쪽에있는공백을 43 제거한다.
예제 Ex2-14.asp(85 페이지 ) <h2> 문자열함수 - left(), right(), mid() </h2> <% strasp = "active server pages" %> 문자열 : <% =strasp %> <br><br> 왼쪽 6 문자 : <% =left(strasp,6) %> <br> 오른쪽 5 문자 : <% =right(strasp,6) %> <br> 가운데 6 문자 : <% =mid(strasp,8,6) %> 44
예제 Ex2-15.asp(86 페이지 ) <h2> 문자열함수 - len(), trim() </h2> <% strasp = " active server pages " %> <table> <tr><td> 문자열 : <td> <% =strasp %> <tr><td> 문자열길이 : <td> <% =len(strasp) %> <tr><td> 왼쪽공백제거후길이 : <td> <% =len(ltrim(strasp)) %> <tr><td> 양쪽공백제거후길이 : <td> <% =len(trim(strasp)) %> </table> 45
문자열검색 Replace() 주어진문자열에서특정문자열을검색하고, 검색한문자열을다른문자열로치환 instr() 주어진문자열에서특정문자열을찾아서그위치를반환 만약찾지못하면 0 값을반환 46
예제 Ex2-16.asp(88 페이지 ) <h2> 문자열함수 - 검색관련 instr(), replace() </h2> <% strasp = " I have a Dream!! " %> <table> <tr> <td> 문자열 : <td> <% =strasp %> <tr> <td> 문자열 DREAM 찾기 : <td> <% =instr(strasp,"dream") %> <tr> <td> 문자열 am 찾기 : <td> <% =instr(strasp,"am") %> <tr> <td> "Dream" 찾아서 "DREAM" 으로치환 : <td> <% =replace(strasp,"dream","dream") %> <tr> <td> 문자열 : <td> <% =strasp %> </table> 47
예제 Ex2-17.asp(90 페이지 ) <h2> 문자열함수 - 출력처리 </h2> <% strasp = "active server pages 3.0" pos = 1 %> 문자열 : <% =strasp %> <br><br> <% for idx = 1 to len(strasp) +1 문자열끝또는공백문자발견 if mid(strasp,idx,1) = " " or idx = len(strasp) + 1 then strline = mid(strasp,pos,idx-pos) pos = idx + 1 response.write strline & "<br>" end if next %> 48
문자열비교 strcomp() 주어진두문자열의크기를비교 같으면 0, 왼쪽이크면 1, 오른쪽이크면 -1을반환 대소문자구분없이비교하려면세번째매개변수에 1을사용한다. 49
예제 Ex2-18.asp <h2> 문자열비교 - strcomp() </h2> <% Dim str1, str2 str1= "Computer" str2 = "computer" Select Case strcomp(str1, str2) Case 0 Case 1 Case -1 End Select %> Response.write "str1 과 str2 의크기가같습니다 <br>" Response.write "str1 이 str2 보다큽니다 <br>" Response.write "str1 이 str2 보다작습니다 <br>" 50
정리 2 장 스크립트언어 VBScript 변수 연산자 배열 제어문및반복문 문자열함수 51