split — 문자열을 Tcl 리스트로 나누기

split — 문자열을 Tcl 리스트로 나누기

문자열을 특정 문자 기준으로 잘라서 요소로 삼고 싶을 때가 많잖아요. split은 그 일을 해주는 명령이에요. 기준 문자들 사이에 있는 문자열 조각을 하나씩 떼어내서, 그 결과를 제대로 된 Tcl 리스트로 돌려줘요.

출처: Tcl 공식 문서 - split

본문

split string ?splitChars?

splitsplitChars 인자에 들어 있는 각 문자 위치에서 string을 잘라 만든 리스트를 돌려줘요. 결과 리스트의 각 요소는 splitChars에 있는 문자들 사이에 놓인 string의 문자들로 구성돼요.

만약 stringsplitChars 문자가 연속해서 나오거나, string의 첫 글자나 마지막 글자가 splitChars에 있으면 빈 리스트 요소가 생겨요. splitChars가 빈 문자열이면 string의 각 문자가 결과 리스트의 각 요소가 돼요. splitChars를 생략하면 기본값은 표준 공백 문자들이에요.

예제

USENET 그룹 이름을 계층 구성 요소로 나눠 볼게요.

split "comp.lang.tcl" .
      → comp lang tcl

splitsplitChars의 모든 문자 위치에서 자른다는 점을 보여주는 예시예요. 조심하지 않으면 정보가 손실될 수 있어요.

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"
}

더 알아보기

  • join — 리스트를 문자열로 합치기
  • string — 문자열 다루기