Job/Tip

ASP 기본 문법

하늘치 2008. 3. 21. 19:02
반응형
* ASP 기초 *
선언 및 생성
1. Dim - 변수를 선언. (예: Dim strName)
2. Set - 개체를 생성. (예: Set rs = Server.CreateObject("ADODB.RecordSet"))
논리 구문
3. IF ~ THEN - 만약 ~ 라면. (조건이 적은 경우)
4. SELECT CASE - 만약 ~ 라면. (조건이 많은 경우)
5. FOR ~ NEXT - 순환하면서 실행. (반복 횟수를 정확하게 알고 있을 때)
6. DO WHILE - 순환하면서 실행. (반복 횟수를 정확하게 알 수 없을 때)

1. Dim

2. Set

3. IF ~ THEN
 
IF intNumber = 1 THEN
    Response.Write "intNumber 에 들어있는 수는 1입니다!"
ELSEIF intNumber = 2 THEN
    Response.Write "intNumber 에 들어있는 수는 2입니다!"
ELSEIF intNumber = 3 THEN
    Response.Write "intNumber 에 들어있는 수는 3입니다!"
ELSE
    Response.Write "intNumber 에 들어있는 수는 1,2,3 이 아닌 다른 숫자입니다!"
END IF

4. SELECT CASE
SELECT CASE intNumber
CASE 1
    Response.Write "intNumber 에 들어있는 수는 1입니다!"
CASE 2
    Response.Write "intNumber 에 들어있는 수는 2입니다!"
CASE 3
    Response.Write "intNumber 에 들어있는 수는 3입니다!"
CASE 4
    Response.Write "intNumber 에 들어있는 수는 4입니다!"
CASE 5
    Response.Write "intNumber 에 들어있는 수는 5입니다!"
CASE 6
    Response.Write "intNumber 에 들어있는 수는 6입니다!"
CASE 7,8,9
    Response.Write "intNumber 에 들어있는 수는 7,8,9 중 하나입니다!"
CASE 10
    Response.Write "intNumber 에 들어있는 수는 10입니다!"
CASE ELSE
    Response.Write "intNumber 에 들어있는 수는 1부터 10 사이의 정수가 아닙니다."
END SELECT

5. FOR ~ NEXT
DIM intLoop
FOR intLoop = 1 TO 10000 STEP 1
    Response.write intLoop & "<BR>"
NEXT

FOR 시작 TOSTEP 증가
    반복되어 실행될 구문
NEXT


6. DO WHILE
DIM intLoop
intLoop = 1
DO WHILE intLoop <= 10000
    Response.write intLoop & "<BR>"
    intLoop = intLoop + 1
LOOP





* 데이터 타입 *
데이터 타입
1. 숫자 서브 타입 정수나 분수, 또는 부동 소수점 등 다섯 개의 타입이 있다.
2. 문자열 서브 타입 텍스트 정보를 보관한다.
3. 날짜 서브 타입 날짜와 시간을 보관하는 데 쓰이는, 미리 정해진 타입이다.
4. 부울린 서브 타입 참, 거짓을 의미하는 TRUE 또는 FALSE 값 중 하나를 가진다.
5. 그 외의 서브 타입 Empty, Null 등을 알아본다.

1. 숫자 서브 타입
1-1. 정수(Integer) - 숫자 타입 중에서 가장 일반적으로 쓰이는 타입입니다.
    -32,768 부터 32,767 사이의 정수가 바로 이 Integer 타입에 해당하게 됩니다.
    (참고로 32,767은 2의 15승에서 1을 뺀 숫자가 되겠습니다.)

1-2. 바이트(Byte) - 바이트라는 말.. 많이 들어보셨지요?
    0부터 255까지의 정수(2의 8승 - 1)가 Byte 타입에 해당합니다.
    이 타입은 기본적인 숫자의 연산에 사용되는 타입입니다.

1-3. 긴 정수(Long) - 이름부터 벌써 '긴' 타입입니다.
    이것은 Integer 타입과 유사하지만 훨씬 더 큰 수를 지원하는 타입입니다.
    -2,147,483,648 부터 2,147,483,647 사이의 정수(2의 31승 - 1)가
    이 Long 타입에 해당합니다.

1-4. 싱글(Single) - 싱글이라는 말 때문에 작은 숫자를 연상하실지도 모르겠습니다.
    하지만 싱글은 예상과는 달리 -3.402823E38 부터 -1.401298E-45 까지의 음수,
    그리고 1.401298E-45 부터 3.402823E38 까지의 양수 단정도 부동소수점
    (單精度 浮動小數點)을 지원하는 타입입니다.

1-5. 더블(Double) - 더블이라.. 아무래도 싱글보다는 곱빼기로 큰 타입 같지 않습니까?
    맞습니다. 하지만 두배가 아닌 훨씬 더 엄청난 범위를 지원하는 데이터 타입이 되겠습니다.
    음수에 대해서는 -1.79769313486232E308 부터 -4.94065645841247E-324 까지,
    양수에 대해서는 4.94065645841247E-324 부터 1.79769313486232E308 까지의
    배정도 부동소수점(倍精度 浮動小數點) 을 지원합니다.

1-6. 통화(Currency) - Currency 타입은 '화폐 단위' 를 의미하는 데이터 타입입니다.
    이 타입은 소숫점 네자리까지의 숫자를 지원하는데요. 지원하는 범위는
    -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 까지 입니다.


2. 문자열 서브 타입
Dim strFirst, strSecond, strPlus
strFirst = "139"
strSecond = "52"
strPlus = strFirst + strSecond

strPlus 변수에 들어있는 값.. 정답은 "13952"


3. 날짜 서브 타입
'날짜 정보' 를 저장하는 날짜 서브 타입을 사용하려면, 정해진 규칙을 사용해야만 합니다.
표현하고자 하는 날짜의 앞뒤에 '#' 기호로 둘러 싸는 것이 바로 그 규칙이 되겠습니다.
예를 들어 1975년 1월 19일을 날짜 서브 타입으로 나타내면 다음과 같습니다.

#01/19/1975#

만약 여기서 '#' 기호를 빼고 사용하면 어떻게 될까요?
이 경우 ASP 에서는 '날짜 서브 타입' 이 아닌 '
숫자 서브 타입' 으로 인식하게 됩니다.


4. 부울린(Boolean) 서브 타입
부울린 서브 타입이라는 말은 우리 말로 하면 '참, 거짓 서브 타입' 정도로 말할 수 있겠습니다.
즉 이 타입에서는 참(TRUE) 아니면 거짓(FALSE) 값만을 가질 수 있는 것이지요.
참고로 이 값을 ASP 상에서 정수형으로 변환할 수도 있는데요.
이 경우 TRUE 는 -1 의 값을, FALSE 는 0 의 값을 가지게 됩니다. (상식으로 알아두세요.)
이 부울린 서브 타입은 지난 강좌에서 보신 대로 조건문(IF ~ THEN) 에서 주로 사용됩니다.


5. 그 외의 서브 타입
그 외의 특별한 타입으로는 Empty 와 NULL, Object, Error 등이 있는데요.
우리는 이중에서 EmptyNULL 에 대해서만 알아보도록 하겠습니다.
('왜 그것들만?' 이라고 생각하셨지요? 나머지 타입들은 잘 사용되지 않기 때문입니다.)

5.1 Empty - Empty 라는 단어의 사전적인 의미는 '비어있다' 는 뜻입니다.
    마찬가지로 Empty 변수는 '값을 전혀 가지고 있지 않다' 는 뜻으로 사용됩니다.
    (주의해야 할 점은 Empty = 0 이 아니라는 것입니다. 0은 분명히 유효한 값입니다.)

5.2 NULL - 이것은 데이터베이스와 연결하여 사용되는 특별한 데이터 타입입니다.
    (혹시 데이터베이스가 무엇인지 모르신다 하더라도 신경쓰지 마시고 그냥 읽어주세요.)
    아무 것도 아니고, 데이터 타입도 아니고, 데이터를 가지고 있지도 않은 것...
    이것이 바로 NULL 의 의미가 되겠습니다.
    이 NULL 에 대해서는 나중에 Database 강좌에서 자세히 다루도록 하겠습니다.

    헷갈리지 말아야 하는 것은.. 아무 것도 아니라고 하는 말을 오해하여
    0 또는 빈 문자열, 빈 공간, 길이가 0인 문자열 등과 혼동해서는 안된다는 것입니다.
    이것들은 분명히 '어떤 값' 입니다. NULL 은 '아무 것도 아니라는' 것에 유의하셔야 합니다.




* 변환 함수 *
변환 함수
1. 숫자 서브 타입 관련 CInt, CLng, CByte, CSng, CDbl, CCur, Fix, Int, Abs
2. 문자열 서브 타입 관련 CStr, Asc, AscB, AscW, Chr, ChrB, ChrW
3. 날짜 서브 타입 관련 CDate, DateValue, TimeValue, DateSerial, TimeSerial
4. 부울린 서브 타입 CBool
5. 기타 변환 함수 Hex, Oct, Sgn



1. 숫자 서브 타입 관련

1-1. CInt, CLng

CInt 와 CLng 함수는 숫자형으로 변환하는 함수 중에 가장 많이 쓰이는 함수입니다.
CInt는 정수형(Integer), CLng 는 긴 정수형(Long)의 값으로 변환시켜 주는 함수지요.

예를 들자면 다음과 같습니다.

DIM intFirst, intSecond, intPlus
intFirst = "200"
intSecond = "400"
intPlus = intFirst + intSecond

이 경우 intPlus 의 값은 600 이 아닌 "200400" 이 된다는 말씀을 지난 강좌에서 드렸지요?
(200 과 400 의 앞뒤에 큰 따옴표가 있기 때문에 문자열 서브 타입이 되기 때문입니다.)
이것을 CInt 함수를 써서 변환시키면 어떻게 될까요?

intFirst = CInt ("200")
intSecond = CInt ("400")
intPlus = intFirst + intSecond

이제 intPlus 에는 우리가 원하던대로 600 이라는 값이 들어가게 됩니다.
이처럼 CInt 는 인자로 들어온 값을 '숫자 서브 타입' 으로 변경해주는 함수입니다.

그런데 만약 intSecond = CInt ("50000") 와 같이 사용하면 어떻게 될까요?
네.. 이 경우에는 '오버플로' 라는 오류를 만나게 됩니다.
정수형(Integer)의 한계치인 32,767 을 넘어갔기 때문이지요.
이때에는 CLng 를 사용하여 intSecond = CLng ("50000") 과 같이 사용하시면 되겠습니다.

그리고 CInt 와 CLng 는 정수형 타입이므로 소수점을 포함한 숫자가 인자로 들어온다면
'반올림한 정수' 를 돌려준다는 사실을 추가적으로 기억해 주시기 바랍니다.
(한가지 재미있는 규칙은.. 정확하게 절반인 경우에는 가장 가까운 짝수를 반환합니다.
즉 CInt (0.5) 인 경우에는 0을, CInt (1.5) 인 경우에는 2을 반환한다는 것이지요.)

또한, 주의하실 점을 한가지 알려드리자면..
CInt 나 CLng 에 '숫자로 변환할 수 없는 값' 을 넣는다면 오류가 발생한다는 것입니다.
(예를 들어 CInt ("abc") 나 CInt ("오십삼") 처럼은 사용하실 수 없다는 뜻이지요.)


1-2. CByte, CSng, CDbl, CCur

그렇다면 이제 CByte와 CSng, CDbl, CCur 등의 함수의 용도도 대충 짐작이 가시겠지요?
CByte 는 CInt 와 마찬가지로 정수 값을 반환해 줍니다. (반올림 규칙도 일치합니다.)
하지만 변환된 값이 0 ~ 255 사이의 값이 아니라면 오류가 발생합니다.

CSng 와 CDbl 도 각각 Single, Double 형의 값을 반환해 주는데요.
예를 들어서 다음 두 변수에 같은 값을 인자로 주었다고 가정해 보겠습니다.

intFirst = CSng ("12345.54321")
intSecond = CDbl ("12345.54321")

이때 intFirst 값은 12345.54, intSecond 값은 12345.54321 으로 나타나게 됩니다.
(결과 자체보다는.. CSng 보다 CDbl 이 정밀하다는 사실을 기억해두시기 바랍니다.)

CCur 역시 CSng, CDbl 과 마찬가지이지만 '통화' 용도로 사용된다는 설명을 드렸었지요?
CCur 은 특이하게도 소수점 5자리에서 반올림을 하게 됩니다.
즉, CCur ("12345.54321") 이라고 한다면 12345.5432 라는 값이 반환되는 것이지요.


1-3. Fix, Int, Abs

Fix 와 Int 는 모두 '잘라내기를 통해 숫자의 정수 부분을 반환' 하는 함수입니다.
즉 Fix (9.8) 이나 Int (9.8) 모두 똑같이 9 라는 값을 반환한다는 뜻이지요.
그렇다면 이 두 함수의 차이는 무엇일까요? 그것은 바로 음수의 처리에 있습니다.
쉽게 말씀드리자면 Fix (-9.8) 은 -9를, Int (-9.8) 은 -10을 반환한다는 의미인 것입니다.
(즉, Fix 는 소수점 이하 숫자를 없애버리는 것이고, Int 는 '내림' 을 하는 것이지요.)

Abs 는 수학에서 많이 쓰이는 함수인데요.. 절대값을 반환합니다.
즉 Abs (-3.5) 나 Abs (3.5) 모두 3.5 라는 값을 반환하게 되지요.




2. 문자열 서브 타입 관련

2-1. CStr

CStr 은 말 그대로 '문자열' 로 바꾸어주는 함수가 되겠습니다.

예를 들어서 intFirst 라는 변수를 선언한 다음, intFirst = 503 이라고 한다면
intFirst 변수에는 자동적으로 503 이라는 '숫자 서브 타입의 값' 이 들어가게 될 것입니다.
이때, strFirst = CStr(intFirst) 라는 구문을 실행하게 되면
strFirst 에는 "503" 이라는 '문자열 서브타입의 값' 이 들어가게 되는 것이지요.


2-2. Asc, AscB, AscW

Asc 함수는 문자열 첫 글자의 'ANSI 문자 코드' 를 반환합니다.

여기서 잠깐!!

ANSI ('안시'라고 읽지요) 문자 코드? 이게 무슨 말일까요?
ANSI 란 'American National Standards Institute' 의 약자이며,
미국 내에서 기술표준 개발을 육성하기 위해 설립된 '미국 표준 협회' 를 의미합니다.

얘네들이 컴퓨터에 관한 표준을 제정한 것이 몇가지가 있는데,
그중에 우리가 알아두면 좋은 것이 '아스키(ASCII)' 라는 녀석입니다..
ASCII 는 'American Standard Code for Information Interchange' 의 약자로서
'컴퓨터나 인터넷상에서 텍스트 파일을 위한 가장 일반적인 형식' 을 의미합니다.

아스키 파일에서는 우리가 키보드에서 입력하는 영문자, 숫자, 특수 문자들이
7 비트의 2 진수(0 또는 1로 이루어진 숫자 조합 7개를 뜻합니다) 로 표현되며,
모두 128 개의 문자가 정의되어 있습니다.

무슨 말인지 도무지 모르시겠다고요? 음.. 사실은 저도 써놓기만 했지 잘은 모릅니다. ^^
행여 잘 모르시겠다고 해서 스트레스 받지 마시고요. 누군가가 'ANSI' 가 어쩌고 'ASCII' 가 저쩌고 그러면 '아, 나 그거 쫌 알아~' 라고 살짝 웃으면서 답해주시면 되겠습니다.

우리가 키보드에서 입력하는 모든 문자들에는 각각 고유한 값이 있는데요.
그걸 정한 애들이 ANSI 이고, 그렇게 정의된 값들이 ASCII 값이다~
우선은 그정도만 알고 계셔도 크게 불편한 점은 없을 것 같습니다. ^^

예를 들어볼까요?
Asc ("A") 의 값은 65, Asc ("B") 는 66, Asc ("C") 는 67...
이런식으로 진행하여 Asc ("Y") 는 89, Asc ("Z") 는 90 이라는 값이 됩니다.
* Asc 는 대문자와 소문자의 값이 서로 다릅니다.
즉 Asc ("A") 는 65 지만, Asc ("a") 는 97 입니다.


2-3. Chr, ChrB, ChrW

Chr 함수는 Asc 의 반대 함수로, 코드 값을 입력하면 그에 해당하는 문자를 반환합니다.
즉, Chr (65) 라고 하면 "A" 라는 값을 반환한다는 의미가 되지요.

마찬가지로 ChrB 와 ChrW 함수도 각각 AscB 와 AscW 함수의 반대 함수가 되겠습니다.

참고로.. 큰 따옴표(")를 의미하는 Chr (34) 번이나, 글의 내용을 입력하는 TEXTAREA 에서
개행을 의미하는 Chr (13), Chr (10) 같은 함수들은 꽤 빈번하게 쓰이는 편이니까요.
이것들은 상식으로 알아두시면 나중에 유용하게 사용할 때가 있을 것입니다.




3. 날짜 서브 타입 관련

3-1. CDate

CDate 함수는 인자로 들어온 값을 '날짜형' 으로 바꾸어 주는 함수입니다.
하지만 인자에 '날짜로 변환할 수 없는 형식의 값' 이 들어오면 오류를 발생시킵니다.
예를 들면 다음과 같습니다.

CDate ("2003년 7월 16일 19:00")

이 함수의 결과는 '2003-07-11 오후 7:00:00' 이 됩니다.
하지만 다음처럼 컴퓨터가 알아볼 수 없는 형식의 문자열을 넣으면 오류를 발생시킵니다.

CDate ("이천삼년 칠월 십육일 일곱시")

'그렇다면 컴퓨터가 알아먹는 날짜 형식이 어떤건데?' 라고 질문이 나올 법 한데요.
이럴 때를 대비해서 ASP 는 ISDATE 라는 함수를 제공합니다.
이 함수는 '날짜형' 으로 변환이 가능한지 아닌지를 알려줍니다.
즉 ISDATE ("2003년 7월 16일 19:00") 은 변환이 가능하므로 True 값을 반환하게 되고요.
ISDATE ("이천삼년 칠월 십육일 일곱시") 는 변환이 불가능하므로 False 값을 반환합니다.

3-2. DateValue, TimeValue, DateSerial, TimeSerial

날짜 서브 타입 관련 함수 중에서 조금 더 세분화 된 함수들이 있는데요.
날짜에 관련된 함수로는 DateValue, DateSerial 이 있고,
시간에 관련된 함수로는 TimeValue, TimeSerial 이 있습니다.

DateValue 와 DateSerial 함수는 결과값으로 모두 '년-월-일' 을 반환하는데요.

DateValue ("2003년 7월 16일 19:00:32")
DateSerial (2003,7,16)

이렇듯 DateValue인자가 하나이고, DateSerial인자가 세개라는 차이가 있습니다.
(두 함수 모두 날짜를 반환하는 함수이므로.. 결과는 "2003-07-16" 으로 동일합니다.)

또한, 시간과 관련된 TimeValue 와 TimeSerial 함수는 '시-분-초' 를 반환합니다.

TimeValue ("2003년 7월 16일 19:00:32")
TimeSerial (19,0,32)

DateValue, DateSerial 함수와 사용법은 같다고 보셔도 무방하겠습니다.
위의 예제에서 보듯이 TimeValue인자가 하나, TimeSerial인자가 세개입니다.
(결과는 두 함수 모두 "오후 7:00:32" 로 같다는 것은... 이미 짐작하고 계셨다고요?)





4. 부울린 서브 타입 관련

4-1. CBool

CBool 함수는 참, 거짓을 판별하여 True 와 False 값중 하나를 반환합니다.
CBool 함수의 인자로는 '숫자' 나 '유효한 식' 이 들어갈 수가 있는데요.
숫자가 인자로 들어가는 경우 0일때는 False, 나머지 숫자인 경우에는 True 를 반환합니다.
예를 들면 다음과 같이 되는 것이지요.

CBool(0) -> False 를 반환합니다.
CBool(1) -> True 를 반환합니다. (0이 아닌 다른 모든 수)

식이 들어가는 경우의 예를 들어보면 다음과 같은데요.

CBool ("a" = "a") -> True 를 반환합니다.
CBool ("a" = "b") -> False 를 반환합니다.

하지만 CBool ("exhibition") 과 같이 '숫자' 도 '식' 도 아닌..
단순한 문자열을 넣는 경우에는 오류를 발생시키므로 주의하셔야 하겠습니다.




5. 기타 변환 함수

5-1. Hex, Oct, Sgn

자주 쓰이지는 않지만 알아두면 좋을 변환 함수로는 Hex, Oct, Sgn 등이 있습니다.

우선 Hex 함수는.. 인자로 들어온 값 (10진수) 의 '16진수로 변환된 값' 을 반환합니다.
즉, Hex (10) 라고 한다면 "A" 를 반환하게 되겠지요.
Oct 함수는 인자로 들어온 값 (10진수) 의 '8진수로 변환된 값' 을 반환합니다.
Oct (10) 이라고 하면 Hex 와는 달리 '12' 를 반환하게 됩니다.

(참고로.. Hex 는 hexadecimal, Oct 는 octal 의 약자로 각각 16진법, 8진법을 의미합니다.
8진법과 16진법에 대한 설명은 중학교 수학 교과서를 참고하시기 바랍니다. -_-a)

Sgn 함수는 수의 부호를 나타내는 정수를 반환하는데요.
양수라면 1을, 음수라면 -1을, 그리고 0이라면 0을 반환합니다.

Sgn (52.3) -> 1 을 반환합니다.
Sgn (-2.5) -> -1 을 반환합니다.
Sgn (0) -> 0 을 반환합니다.




* 문자열 관련 함수 *

문자열 관련 함수
1. UCASE, LCASE 문자열의 내용을 대문자, 소문자로 변환시켜준다.
2. LEN 문자열의 길이를 반환한다.
3. LEFT, RIGHT, MID 문자열의 좌, 우, 중간에서 지정한 만큼의 문자열을 뽑아낸다.
4. INSTR, INSTRREV 해당되는 문자열의 좌측, 우측 위치를 반환한다.
5. LTRIM, RTRIM, TRIM 문자열의 좌측, 우측, 전체의 공백을 제거한다.
6. REPLACE 문자열의 내용중 일부를 다른 문자열로 변경한다.
7. SPLIT 문자열에서 특정 문자열을 기준으로 나누어 배열로 저장한다.


1. UCASE, LCASE

UCASELCASE 함수는 각각 문자열을 '대문자', '소문자' 로 변환시켜 주는 함수입니다.
(UCASE 는 'uppercase (대문자)', LCASE 는 'lowercase (소문자)' 의 약자입니다.)
예를 들어 strTest 라는 변수에 "I Love You" 라는 문자열이 있다고 가정해 보겠습니다.

Dim strTest, strUpper, strLower

strTest = "I Love You"
strUpper = UCASE (strTest)
strLower = LCASE (strTest)

이런 경우 strUpper 변수에는 "I LOVE YOU" (대문자로 변환됨) 라는 문자열이,
그리고 strLower 변수에는 "i love you" (소문자로 변환됨) 라는 문자열이 들어가게 됩니다.
어떻습니까? 쉽게 이해를 하실 수 있으시겠지요.

그렇다면 대,소문자로 변환할 수 없는 한글이나 숫자를 입력하는 경우에는 어떻게 될까요?
똑똑한 ASP 는 대,소문자로 변환할 수 없는 경우에는 원본 문자열을 그대로 반환합니다.
즉, UCASE ("사랑해요") 또는 LCASE ("486486") 처럼 변환이 불가능한 문자열을 입력했다면 원본 문자열에 아무런 수정을 가하지 않고 그대로 돌려준다는 의미가 되는 것입니다.


2. LEN

LEN 은 길이를 의미하는 'length' 의 약자로서 '문자열의 길이' 를 반환합니다.
LEN 함수는 한글, 숫자, 영문, 특수 문자를 가리지 않고 한 글자당 1씩 계산하는데요.
주의하셔야 할 점은 '공백' 도 문자로 인식하여, 길이에 포함시킨다는 사실입니다.
예를 들어 strTest 라는 변수에 "I Love You..." 라는 문자열이 들어 있다고 해볼까요?

Dim strTest, intLength

strTest = "I Love You..."
intLength = LEN (strTest)

이 경우 intLength 에는 13이라는 정수형 값이 들어가게 되는 것이지요.
만약 strTest 라는 변수에 아무런 값도 들어있지 않거나, 빈 문자열이라면?
LEN 함수는 이러한 경우에 0 을 반환합니다. 해당 문자열의 길이가 없기 때문이지요.


3. LEFT, RIGHT, MID

LEFT (RIGHT) 함수는 문자열의 왼쪽 (오른쪽) 에서 지정한 길이 만큼의 문자열을 반환하고,
MID 함수는 문자열의 지정한 위치에서, 지정한 길이 만큼의 문자열을 반환합니다.
이 함수들에 대한 설명은 예를 들어 설명드리는 것이 가장 좋을 것 같네요.

Dim strTest, strLeft, strRight, strMid

strTest = "Welcome to Dukyoung.net"
strLeft = LEFT (strTest, 7)
strRight = RIGHT (strTest, 12)
strMid = MID (strTest, 4, 7)

자, 위와 같은 문장을 ASP 에서 실행하면, 각각의 변수에는 어떤 값들이 들어가게 될까요?
우선 strLeft 에는 strTest 의 왼쪽에서 7글자.. "Welcome" 이 들어가게 됩니다.
그리고 strRight 에는 strTest 의 오른쪽에서 12글자.. "Dukyoung.net" 이 들어가지요.
마지막으로 strMid 에는 strTest 의 (왼쪽에서) 4번째 글자인 c 부터의 7글자..
즉, "come to" 라는 문자열이 들어가게 됩니다. (공백도 하나의 문자로 인정합니다.)

사용법이 상당히 간단하지요? 잘 기억해 두시기를 바랍니다.


4. INSTR, INSTRREV

INSTRINSTRREV 함수는 '특정 문자열의 위치' 를 알아내는 함수입니다.
예를 들어서 "내가 그린 기린 그린 그림은 잘 그린 기린 그린 그림이다." 이라는 문장에서
'그린' 이라는 문자가 어디있는지 찾아내려면 다음과 같이 사용하시면 됩니다.

Dim strTest, intTest

strTest = "내가 그린 기린 그린 그림은 잘 그린 기린 그린 그림이다."
intTest = INSTR (strTest, "그린")

이 문장을 실행하고 난 다음 intTest 변수에 들어갈 값은 4가 됩니다.
즉, "그린" 이라는 문자는 strTest 문자열의 4번째 위치에 있다는 뜻이 되는 것이지요.
(만약 "그린" 이라는 문자열이 없다면 intTest 에는 0 이라는 값이 들어가게 됩니다.)
그런데.. INSTR 함수에서는 또 다른 옵션을 줄 수가 있는데요.
그것은 바로 '시작 위치' 를 지정할 수가 있다는 것입니다.
위의 예를 조금 변형하여 다음과 같이 수정을 해보겠습니다.

intTest = INSTR (5, strTest, "그린")

이 함수의 의미는 과연 무엇일까요?
이것은 "그린" 이라는 문자를 찾긴 찾는데.. 5번째 문자 이후부터 찾겠다는 뜻이 됩니다.
즉, 가장 앞에 있는 5 라는 인자는 '시작 위치' 를 나타내는 것이지요.
따라서 이 함수를 실행시킨 후 intTest 의 값은 4가 아닌 10이 됩니다. (두번째 '그린'의 위치)
(사실.. 이 함수에는 가장 마지막 인자로 이진(Binary), 텍스트(Text) 비교에 관련된 인자가
하나 더 있습니다만, 그다지 사용되지 않으므로 설명을 생략하도록 하겠습니다.)

INSTRREV 함수는 INSTR 함수와 사용법이 같은데.. 시작하는 위치가 반대입니다.
즉 INSTR 함수가 문자열의 처음부터 찾는 것에 반해, INSTRREV 함수는 문자열의 끝에서부터 역순으로(거꾸로) 찾는 것이지요.

intTest = INSTRREV (strTest, "그린")

이렇게 하면 intTest 값에는 25라는 숫자가 들어가게 됩니다.
끝에서부터 찾았을 때 가장 먼저 나온 문자열의 위치를 반환하는 것이지요.
이 함수는 '파일의 확장자' 를 알아낼 때에 특히 유용하고, 자주 쓰이는 함수입니다.
(그 내용에 관해서는 나중에 이야기할 기회가 있을 것 같네요. ^^)

INSTRREV 함수 역시 시작 위치를 설정할 수 있는데요..
INSTR 함수와는 다르게 세번째 인자로서 설정합니다. (혼동하지 마시기 바랍니다.)
시작 위치를 설정하면 그 위치부터 역순으로(거꾸로) 검색하게 되는 것이지요.

intTest = INSTRREV (strTest, "그린", 24)

이렇게 사용한 경우 intTest 값에는 19라는 값이 들어가게 됩니다.


5. LTRIM, RTRIM, TRIM

TRIM 이라는 함수는 단어 뜻 그대로 '잘라내는' 함수입니다.
아무거나 잘라내는 것은 아니고, 문자열의 앞뒤에 있는 '공백' 을 잘라내는 함수가 되겠습니다.
마찬가지로 LTRIM좌측의 공백을, RTRIM우측의 공백을 잘라내는 함수입니다.
이 함수들의 예를 들어보면 다음과 같습니다.

Dim strTest, strAll, strLeft, strRight

strTest = "    My Baby Grand    "
strAll = TRIM (strTest)
strLeft = LTRIM (strTest)
strRight = RTRIM (strTest)

strTest 라는 문자열의 앞,뒤로 3칸의 공백 문자가 들어가 있습니다.
그렇다면 TRIM 함수를 실행한 strAll 이라는 변수에는 어떤 값이 들어가게 될까요?
strAll 변수에는 양 옆의 공백이 사라진 "My Baby Grand" 이라는 문자열이 들어가게 됩니다.
마찬가지로 strLeft 에는 좌측의 공백이 사라진 "My Baby Grand???" 문자열이,
strRight 에는 우측의 공백이 사라진 "???MY Baby grand" 문자열이 들어가게 되는 것이지요.

사용자들이 어떤 페이지에서 값을 입력했을 때, 좌우에 공백을 포함하여 입력한 경우
상당히 유용하게 쓰이는 함수가 되겠습니다.


6. REPLACE

문자열 중에서 특정 내용을 다른 내용으로 바꾸려 할 때 REPLACE 함수를 사용합니다.
이 함수의 사용법은 다음과 같습니다.

Dim strBefore, strAfter

strBefore = "I like you.. Do you like me?"
strAfter = REPLACE (strBefore, "like", "love")

이것은 strBefore 이라는 변수에 담긴 "I like you.. Do you like me?" 라는 문자열 중에서
"like" 라는 문자를 찾아서 그것들만 "love" 라는 문자로 바꾸라는 의미가 되겠습니다.
이 함수를 실행하면 strAfter 이라는 변수에는 변경된 문자열인
"I love you.. Do you love me?" 값이 들어가게 되는 것입니다.
(당연한 이야기지만, 해당되는 문자열이 없을 때에는 문자열에 아무런 변화가 없게 됩니다.)


7. SPLIT

마지막으로 알아볼 함수는 SPLIT 함수입니다.
이 함수는 어떤 문자열에서 특정한 문자열 또는 기호를 기준으로 문자열을 분해한 다음,
분해된 문자열들을 배열에 저장하는 함수입니다.

여기서 잠깐!!

자.. 드디어 '배열' 이 나왔습니다.
(배열을 두려워하거나, 잘 안쓰시는 초보 분들이 의외로 많은 것 같더군요..)
지레 겁먹지 마시고, 차근차근하게 한번 이해해 보도록 하겠습니다.

배열은.. '관련있는 변수들의 모임' 이라고 생각하시면 이해가 빠를 것 같습니다.
예를 들어 주소록을 작성하려고 하는데, 사람들의 이름을 저장하기 위하여 이름마다 각각 다른 변수를 선언해서 저장하려 한다면 상당히 불편한 일이 될 것입니다.
예를 들면 다음과 같습니다.

Dim strNameOne, strNameTwo, strNameThree, strNameFour

strNameOne = "김덕영"
strNameTwo = "김태영"
strNameThree = "윤영지"
strNameFour = "장경수"

4명의 이름을 저장하기 위해서 하나하나 각각 변수를 지정하면 위처럼 사용해야 합니다.
이와 같은 경우에 배열을 사용하면 다음과 같이 표현할 수가 있겠습니다.

Dim arrName (3)

arrName (0) = "김덕영"
arrName (1) = "김태영"
arrName (2) = "윤영지"
arrName (3) = "장경수"

배열의 선언 방법은 간단합니다. 일반 변수의 오른쪽에 괄호만 붙여주면 되거든요.
우선 가장 윗 줄에서 arrName (3) 이라는 배열을 선언했습니다.
3이라는 숫자는 '이 배열이 4개의 항목을 가질 것이다' 라는 것을 알려주는 것입니다.

(자, 여기서 질문이 들어올 것 같군요. '4개의 항목인데 3이라니.. 오타지?' 라고 말이지요.
이것은 오타가 아닙니다. 우리는 숫자를 셀 때 1부터 세는 것을 당연스럽게 여기지만,
배열에서는 1이 아닌 0을 기준으로 합니다. 때문에 배열 요소의 개수는 언제나 괄호안의 숫자에 1을 더한 크기가 되는 것이지요.)

이렇게 배열이 선언되었다면, 위의 예에서 보듯이 숫자 (인덱스 번호)를 이용해
각각의 항목에 값을 저장할 수가 있습니다.

그렇다면 역으로.. 배열의 괄호 안에 들어가는 '인덱스 번호' 만 알고 있다면
아주 간단하게 그 '인덱스 번호' 에 해당하는 값을 알아낼 수가 있습니다.

배열에 대한 더 자세한 설명은 다음 기회에 보충하도록 하겠습니다.

SPLIT 의 사용 예를 들어보면 다음과 같습니다.

Dim arrName, strTest

strTest = "김덕영,김태영,윤영지,장경수"
arrName = SPLIT (strTest, ",")

strTest 라는 문자열에서는 쉼표(,) 를 기준으로 사람들의 이름을 구분하고 있습니다.
그래서 SPLIT 함수를 사용할 때 쉼표를 구분자로 사용하여 문자열을 분해했습니다.

이렇게 SPLIT 함수를 사용하고 난 후에 arrName 이라는 변수에는 배열이 저장되게 됩니다.
쉼표(,)를 기준으로 구분했을 때 가장 먼저 구분된 값은 "김덕영" 이 될테고요.
이 값은 배열의 가장 첫번째인 arrName (0) 에 저장되게 됩니다.
(배열에서 맨 처음은 1이 아닌 0이라는 사실을.. 반드시 기억하시기 바랍니다.)
마찬가지로 다음으로 구분된 값인 "김태영" 은 arrName (1) 에 저장되고,
이런 식으로 arrName (2) 에는 "윤영지", arrName (3) 에는 "장경수" 가 저장됩니다.

그렇게 저장된 값들은 '인덱스 번호' 를 이용하여 쉽게 접근할 수가 있습니다.
3번째로 구분된 값을 알고 싶다면 arrName (2) 라고 하면 되는 것이지요.
(위에서 말씀드렸지만 배열은 1이 아닌 0부터 시작하기 때문에 arrName (2) 가 됩니다.)

주의하실 점은, 범위를 초과하는 '인덱스 번호' 로 접근 하면 오류가 발생된다는 점입니다.
위의 예에서는 arrName (3) 까지만 값이 저장되었는데, 만약 arrName (4) 처럼
범위를 넘어선 '인덱스 번호' 로 접근하려 하면 오류가 발생된다는 뜻이지요.






반응형