Tuesday, August 29, 2006
펄/Perl ] split 연산자로, 문자열 (단어별로) 분리하여 배열에 저장 - split 함수 사용법
split은, 함수(Function)처럼 보이지만, 실은 함수가 아니라 연산자(Operator)입니다.
어떤 문자열을 "구분 기호"로써 분리하여, 배열 속에 차곡차곡 나누어 담는 기능을 가집니다.
사용법을 한글로 표현하자면 이렇습니다:
이렇게
분리 기호 (분리자 Separator) 와, 분리할 문자열을 생략할 수 있습니다. 그러면, 디폴트 변수인 $_ 의 내용에서 공백을 기준으로 분리합니다.
다음의 3개는 동일한 역할을 합니다.
@_ = split;
@_ = split / /, $_;
@_ = split ' ', $_;
@_ = split /\s+/, $_;
또한 /\s+/ 이렇게 분리자를 정규식 / 정규표현식 (Regular Expressions; Regex) 으로 지정할 수도 있습니다.
다음의 예제를 보면 쉽게 알 수 있습니다. "둥글고 하얀 어떤 거대한..." 등의 문장을 공백을 기준으로 분리하면, 각 단어별로 분리되는데, 그 단어들을 배열 속에 집어 넣고, 그 배열의 내용을 DumpArray 서브루틴을 사용해 알아보기 쉽게 출력합니다.
"산모퉁이,너머의,먼,하늘에는,희미한..." 이 부분은 쉼표로 분리된 문자열을 분해하는 예제입니다.
split /,/, $s2;
이렇게 분리자로서 쉼표(,)을 넣어주면 됩니다.
위의 예제를 실행한 결과:
평범한 문장(문자열)이, 단어별로 분해된 것을 알 수 있습니다.
split 연산자의 정반대 역할을 하는 join 함수 사용법입니다: ▶▶ Perl/펄] join 함수 사용법 예제; join Function Example
▶▶ [Perl] 배열(Array) 덤프; 디버그용
어떤 문자열을 "구분 기호"로써 분리하여, 배열 속에 차곡차곡 나누어 담는 기능을 가집니다.
사용법을 한글로 표현하자면 이렇습니다:
@배열 = split /분리자/, $문자열;
이렇게
@_ = split;
분리 기호 (분리자 Separator) 와, 분리할 문자열을 생략할 수 있습니다. 그러면, 디폴트 변수인 $_ 의 내용에서 공백을 기준으로 분리합니다.
다음의 3개는 동일한 역할을 합니다.
@_ = split;
@_ = split / /, $_;
@_ = split ' ', $_;
@_ = split /\s+/, $_;
또한 /\s+/ 이렇게 분리자를 정규식 / 정규표현식 (Regular Expressions; Regex) 으로 지정할 수도 있습니다.
다음의 예제를 보면 쉽게 알 수 있습니다. "둥글고 하얀 어떤 거대한..." 등의 문장을 공백을 기준으로 분리하면, 각 단어별로 분리되는데, 그 단어들을 배열 속에 집어 넣고, 그 배열의 내용을 DumpArray 서브루틴을 사용해 알아보기 쉽게 출력합니다.
split 연산자(x함수) 사용 예제
#!/usr/bin/perl
use strict; use warnings;
# 디폴트 변수인 $_ 의 내용을 분해하여, 디폴트 배열인 @_ 에 넣어 출력
$_ = "둥글고 하얀 어떤 거대한 무엇이 자꾸만 떠올랐는데 마치 이 세상의 것이 아닌 것처럼 여겨졌다.";
@_ = split;
&DumpArray(@_);
# 변수 $s 의 내용을 분해하여, 배열 @foo 에 넣어 출력
my $s = "무슨 기척을 느끼고 뒤돌아보았더니 아까 그 행인이 산모퉁이를 황급히 돌아가고 있었다.";
my @foo = split / /, $s;
&DumpArray(@foo);
# 쉼표로 분리된 변수 $s2 의 내용을 분해하여, 배열 @foo2 에 넣어 출력
my $s2 = "산모퉁이,너머의,먼,하늘에는,희미한,구름이,안개처럼,끼어,있었다.";
my @foo2 = split /,/, $s2;
&DumpArray(@foo2);
#################################################
# 배열 요소를 출력하는 서브루틴
sub DumpArray {
printf "Array Total Elements: %d\n", $#_ + 1;
for (my $i = 0; $i <= $#_; $i++) {
printf "[%d] = \"$_[$i]\"\n", $i;
}
}
use strict; use warnings;
# 디폴트 변수인 $_ 의 내용을 분해하여, 디폴트 배열인 @_ 에 넣어 출력
$_ = "둥글고 하얀 어떤 거대한 무엇이 자꾸만 떠올랐는데 마치 이 세상의 것이 아닌 것처럼 여겨졌다.";
@_ = split;
&DumpArray(@_);
# 변수 $s 의 내용을 분해하여, 배열 @foo 에 넣어 출력
my $s = "무슨 기척을 느끼고 뒤돌아보았더니 아까 그 행인이 산모퉁이를 황급히 돌아가고 있었다.";
my @foo = split / /, $s;
&DumpArray(@foo);
# 쉼표로 분리된 변수 $s2 의 내용을 분해하여, 배열 @foo2 에 넣어 출력
my $s2 = "산모퉁이,너머의,먼,하늘에는,희미한,구름이,안개처럼,끼어,있었다.";
my @foo2 = split /,/, $s2;
&DumpArray(@foo2);
#################################################
# 배열 요소를 출력하는 서브루틴
sub DumpArray {
printf "Array Total Elements: %d\n", $#_ + 1;
for (my $i = 0; $i <= $#_; $i++) {
printf "[%d] = \"$_[$i]\"\n", $i;
}
}
"산모퉁이,너머의,먼,하늘에는,희미한..." 이 부분은 쉼표로 분리된 문자열을 분해하는 예제입니다.
split /,/, $s2;
이렇게 분리자로서 쉼표(,)을 넣어주면 됩니다.
위의 예제를 실행한 결과:
D:\Z>0.pl
Array Total Elements: 14
[0] = "둥글고"
[1] = "하얀"
[2] = "어떤"
[3] = "거대한"
[4] = "무엇이"
[5] = "자꾸만"
[6] = "떠올랐는데"
[7] = "마치"
[8] = "이"
[9] = "세상의"
[10] = "것이"
[11] = "아닌"
[12] = "것처럼"
[13] = "여겨졌다."
Array Total Elements: 11
[0] = "무슨"
[1] = "기척을"
[2] = "느끼고"
[3] = "뒤돌아보았더니"
[4] = "아까"
[5] = "그"
[6] = "행인이"
[7] = "산모퉁이를"
[8] = "황급히"
[9] = "돌아가고"
[10] = "있었다."
Array Total Elements: 9
[0] = "산모퉁이"
[1] = "너머의"
[2] = "먼"
[3] = "하늘에는"
[4] = "희미한"
[5] = "구름이"
[6] = "안개처럼"
[7] = "끼어"
[8] = "있었다."
D:\Z>
Array Total Elements: 14
[0] = "둥글고"
[1] = "하얀"
[2] = "어떤"
[3] = "거대한"
[4] = "무엇이"
[5] = "자꾸만"
[6] = "떠올랐는데"
[7] = "마치"
[8] = "이"
[9] = "세상의"
[10] = "것이"
[11] = "아닌"
[12] = "것처럼"
[13] = "여겨졌다."
Array Total Elements: 11
[0] = "무슨"
[1] = "기척을"
[2] = "느끼고"
[3] = "뒤돌아보았더니"
[4] = "아까"
[5] = "그"
[6] = "행인이"
[7] = "산모퉁이를"
[8] = "황급히"
[9] = "돌아가고"
[10] = "있었다."
Array Total Elements: 9
[0] = "산모퉁이"
[1] = "너머의"
[2] = "먼"
[3] = "하늘에는"
[4] = "희미한"
[5] = "구름이"
[6] = "안개처럼"
[7] = "끼어"
[8] = "있었다."
D:\Z>
평범한 문장(문자열)이, 단어별로 분해된 것을 알 수 있습니다.
split 연산자의 정반대 역할을 하는 join 함수 사용법입니다: ▶▶ Perl/펄] join 함수 사용법 예제; join Function Example
▶▶ [Perl] 배열(Array) 덤프; 디버그용
tag: perl
Perl | 펄
<< Home