ASP에서 join과 split을 이용한 문자열 파싱(parsing) 


 저자: Daniel Joe |  날짜: 2001년 08월 17일    


join과 split는 문자열을 파싱(parsing)함에 있어 매우 유용한 함수들이다. 같단히 설명하자면, join은 하나의 일차원 배열의 내용을 하나의 문자열로 만드는 함수이고, split은 하나의 문자열 내용을 하나의 일차원 배열로 나누어 담는 함수이다.

join에 대한 문법은 다음과 같다:


join(list[, delimiter]) 


여기서 list는 문자열로 연결시킬 내용들이 들어 있는 배열을 나타낸다. Delimeter는 배열에 있는 요소들로부터 문자열을 만들 때 각 요소 사이에 들어갈 문자열을 의미한다. 이 값은 옵션으로 이것을 지정하지 않으면 내부적으로 빈 문자열(" ")로 처리된다. 이제 간단한 예를 한 번 살펴 보도록 하자.


Dim OneDimArray(5)
OneDimArray(0) = "Hello,"
OneDimArray(1) = "my"
OneDimArray(2) = "name"
OneDimArray(3) = "is"
OneDimArray(4) = "Daniel!"

Dim strSentence
strSentence = join(OneDimArray) 


위의 코드는 strSentence에 "Hello, my name is Daniel!"을 저장하게 된다. 만일 strSentence = join(OneDimArray) 부분을 strSentence = join(OneDimArray, ",") 부분으로 변경하면 strSentence에는 "Hello,,my,name,is,Daniel!"이 저장된다. 즉, 디리미터(delimeter, 구분자)는 앞의 경우 디폴트인 " " 이고, 후자의 경우는 ","인 것이다. 만일 배열의 각 요소를 하나의 문자열로 만들 때 각 요소 사이의 구분자가 없이 붙이고 싶을 경우는 단순히 strSentence = join(OneDimArray, "")라고 해주면 된다. 그 결과는 "Hello,mynameisDaniel!"이 될 것이다.


split은 join의 반대 결과를 만든다. split은 문자열을 취하여 문자열의 각 요소들을 적절한 기준으로 잘라 내 일차원 배열로 담아낸다. split의 문법은 다음과 같다:


split(String Expression[, delimiter[, count[, compare]]]) 


여기서 반드시 필요한 파라미터는 배열로 담을 문자열, Expression이다. Delimeter는 join과 마찬가지로 옵션이다. 디폴트는 " " 이다. count는 결과로 반환할 부분 문자열의 갯수이다. compare는 부분 문자열을 비교하는 방법을 결정한다. 이제 간단한 예를 한 번 살펴 보도록 하자.


Dim strSentence
strSentence = "Hello, my name is Daniel!"

Dim OneDimArray
OneDimArray = split(strSentence)
 


위의 코드는 strSentence에 담겨 있는 문자열을 OneDimArray란 일차원 배열의 각 요소에 "Hello,", "my", "name", "is", "Daniel!"을 저장한다. 만일 OneDimArray 배열에 3 요소만 저장하고 싶은 경우 count 파라미터를 이용하여 부분 문자열의 갯수를 정해주면 된다. 즉, OneDimArray = split(strSentence) 부분을 OneDimArray = split(strSentence, " ", 3)으로 변경시켜주면 된다. 이 결과는 "Hello,", "my", "name is Daniel!"이 된다. 만일 구분자로 컴마(,)를 사용하고 싶다면 OneDimArray = split(strSentence) 부분을 OneDimArray = split(strSentence, ",")로 변경시켜주면 된다. 이 결과는 "Hello", "my name is Daniel!"이 될 것이다.

앞에서도 언급했지만 join과 split은 서로 반대 관계이다. 예를 들어, 다음과 같은 코드를 보자.


Dim strSentence, strCopy
strSentence = "Hello, my name is Bob!"
strCopy = join(split(strSentence)) 


위의 코드에서 strCopy와 strSentence는 동일한 값을 갖는다.

지금까지 join과 split의 사용 방법에 대해 알아 보았다. 그렇다면 이 함수들은 언제 유용하게 사용될 수 있을까? 사실 ASP에서 문자열을 조작함에 있어 join과 split의 사용은 필수적이다. 하나의 예를 들기 위해 지난 시간에 살펴보았던 "AdRotator를 이용하여 배너 광고 로테이션 시키는 방법"에서 사용한 AdRotator.txt 파일을 살펴 보도록 하자. 그 파일에는 다음과 같은 형식의 데이터들이 저장되어 있다:


Advertiser Name
Advertiser URL
Advertiser Category
Banner ID
Comment
*
Advertiser Name
Advertiser URL
Advertiser Category
Banner ID
Comment
*
Advertiser Name
Advertiser URL
Advertiser Category
Banner ID
Comment
*

... 


이런 텍스트 파일을 이용하여 작업을 할 때 제일 먼저 하는 일은 FileSystemObject 객체를 이용하여 전체 텍스트 내용을 하나의 문자열로 읽어 들이는 것이다. 그 문자열을 str이란 변수로 담았다고 한다면 다음으로 할 일은 recArray = split(str, "*")을 해주는 것이다.

이렇게 함으로써 하나의 레코드 단위를 배열의 각 요소로 저장할 수가 있다. 마지막으로 레코드에 있는 각각의 요소를 얻으려면 elementArray = split(recArray(i), chr(13))이라고 해주면 된다. 여기서 chr(13)은 라인이 분리되어 있는 값을 의미한다.

이런 과정을 거침으로써 텍스트 파일의 내용을 적절히 파싱(parsing)을 할 수 있게 된다.

2008/02/21 15:49 2008/02/21 15:49

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다