고정 크기 배열의 사용에서와 같이 배열에 저장하고자 하는 데이터의 수가 미리 정해져 있지 않아 인덱스의 크기를 모를 때는 동적 배열을 사용할 수 있다. 동적 배열은 다음과 같은 형식으로 선언된다.
Dim Member()
...
ReDim Member(2)
Member(0) = "황재선"
Member(1) = "이성남"
Member(2) = "정민호"
우선 배열의 이름 뒤에 동적 배열을 선언하기 위해서 인덱스를 삭제하고 괄호를 두어 나중에 배열의 크기가 정해지면 생성할 수 있도록 암시적인 선언만 한다. 이렇게 선언된 동적 배열에 실제 공간을 할당하기 위해서 배열의 크기가 정해지면 ReDim문을 이용하여 새롭게 배열의 크기를 늘리게 된다. 이렇게 다시 선언된 배열은 인덱스의 크기만큼 데이터의 저장이 가능하다.
동적 배열은 이외에도 한번 크기가 정해진 배열의 크기를 또다시 변경할 수도 있다. 다음의 사용법을 참고하자.
Dim Member()
...
ReDim Member(2)
Member(0) = "황재선"
Member(1) = "이성남"
Member(2) = "정민호"
...
ReDim Member(5)
이렇게 새롭게 인덱스를 재조정하고자 할 경우에는 ReDim문을 또 사용하면 배열의 인덱스 크기의 변경이 가능한 것이다. 그러나 위의 경우처럼 ReDim을 두 번 사용하게 된다면 이전에 저장되어 있던 배열의 값은 사라진다. 만일 새롭게 추가되는 내용을 위해 크기를 재조정하는 경우라면 기존의 데이터가 사라지게 된다면 심각한 오류가 되는 것이다. 이런 오류를 방지하기 위해서 동적 배열의 선언에 Preserve 키워드를 사용하여 기존의 데이터를 보존할 수 있다. 다음의 예제를 보면서 Preserve의 사용에 대해서 알아보자.
● array2.asp
<%@ Language=VBScript %>
<%
Dim Language()
ReDim Language(4)
Language(0) = "ASP"
Language(1) = "PHP"
Language(2) = "Visual Basic"
Language(3) = "Delphi"
Language(4) = "Power Builder"
%>
<HTML>
<HEAD>
<TITLE>동적 배열 사용</TITLE>
</HEAD>
<BODY>
<P> 내가 알고 있는 컴퓨터 프로그래밍 언어 </P>
1. <%=Language(0)%> <BR>
2. <%=Language(1)%> <BR>
3. <%=Language(2)%> <BR>
4. <%=Language(3)%> <BR>
5. <%=Language(4)%> <BR>
<BR>
<%
ReDim Preserve Language(5)
Language(5) = "Visual C++"
%>
Preserve를 사용하여 배열의 인덱스 재설정<BR>
1. <%=Language(0)%> <BR>
2. <%=Language(1)%> <BR>
3. <%=Language(2)%> <BR>
4. <%=Language(3)%> <BR>
5. <%=Language(4)%> <BR>
6. <%=Language(5)%> <BR>
<BR>
<%
ReDim Language(6)
Language(6) = "Java"
%>
ReDim만 사용하여 배열의 인덱스 재설정<BR>
1. <%=Language(0)%> <BR>
2. <%=Language(1)%> <BR>
3. <%=Language(2)%> <BR>
4. <%=Language(3)%> <BR>
5. <%=Language(4)%> <BR>
6. <%=Language(5)%> <BR>
7. <%=Language(6)%> <BR>
</BODY>
</HTML>
[그림 8-2] array2.asp 결과
동적 배열의 사용을 위해 첫 줄에서 [Dim Language()]로 선언을 한 뒤 새롭게 ReDim을 이용하여 인덱스의 공간을 추가하였다. 배열에 데이터를 저장한 뒤 첫 번째 출력을 하게 된다. 이렇게 출력이 이루어진 후 새로운 데이터의 추가를 위해 배열의 인덱스 크기를 증가시킨다.
ReDim Preserve Language(5)
Language(5) = "Visual C++"
Preserve를 이용하여 기존의 배열 데이터는 보존하면서 새로운 인덱스를 추가시키고 값을 대입한다. 이렇게 하여 출력하면 모든 배열의 데이터가 출력되는 것을 확인할 수 있다. 그러나 그 이후에 나오는 단순한 ReDim만으로 인덱스를 추가하면 기존에 저장되어 있던 배열의 값은 모두 사라지게 된다.
ReDim Language(6)
Language(6) = "Java"
위의 선언과 같이 Language(6)에만 배열의 값이 저장되고 이전에 저장되어 있던 값들은 모두 사라지게 된다.
출처 : http://www.taeyo.pe.kr/lecture/2_beginner_hwang/1_8.htm
'공부 > ASP' 카테고리의 다른 글
asp db쿼리 결과를 배열에 담기 getrows(), ASP 배열을 자바스크립트 배열로 변경 (0) | 2014.05.13 |
---|---|
asp 쿠키 저장, 제거, 사용 (0) | 2014.05.13 |
ASP 문자열 함수 다루기 (0) | 2014.05.13 |
asp 완료 후 페이지 이동 (0) | 2014.05.09 |
asp 반복문(for) (0) | 2014.05.09 |
댓글