split — 문자열을 Tcl 리스트로 나누기
split — 문자열을 Tcl 리스트로 나누기
문자열을 특정 문자 기준으로 잘라서 요소로 삼고 싶을 때가 많잖아요. split은 그 일을 해주는 명령이에요. 기준 문자들 사이에 있는 문자열 조각을 하나씩 떼어내서, 그 결과를 제대로 된 Tcl 리스트로 돌려줘요.
본문
split string ?splitChars?
split은 splitChars 인자에 들어 있는 각 문자 위치에서 string을 잘라 만든 리스트를 돌려줘요. 결과 리스트의 각 요소는 splitChars에 있는 문자들 사이에 놓인 string의 문자들로 구성돼요.
만약 string에 splitChars 문자가 연속해서 나오거나, string의 첫 글자나 마지막 글자가 splitChars에 있으면 빈 리스트 요소가 생겨요. splitChars가 빈 문자열이면 string의 각 문자가 결과 리스트의 각 요소가 돼요. splitChars를 생략하면 기본값은 표준 공백 문자들이에요.
예제
USENET 그룹 이름을 계층 구성 요소로 나눠 볼게요.
split "comp.lang.tcl" .
→ comp lang tcl
split이 splitChars의 모든 문자 위치에서 자른다는 점을 보여주는 예시예요. 조심하지 않으면 정보가 손실될 수 있어요.
split "alpha beta gamma" "temp"
→ al {ha b} {} {a ga} {} a
잘 만들어진 리스트가 아닌 문자열에서 리스트 단어를 뽑아낼 때도 써요.
split "Example with {unbalanced brace character"
→ Example with \{unbalanced brace character
문자열을 낱개 문자로 쪼개는 예시예요.
split "Hello world" {}
→ H e l l o { } w o r l d
레코드 지향 파일 파싱
한 줄에 하나의 레코드가 있고, 각 줄이 콜론으로 구분된 필드 목록으로 이뤄진 Unix /etc/passwd 파일을 파싱해 볼게요.
## Read the file
set fid [open /etc/passwd]
set content [read $fid]
close $fid
## Split into records on newlines
set records [split $content "\n"]
## Iterate over the records
foreach rec $records {
## Split into fields on colons
set fields [split $rec ":"]
## Assign fields to variables and print some out...
lassign $fields \
userName password uid grp longName homeDir shell
puts "$longName uses [file tail $shell] for a login shell"
}