알아두면 편리한 문자처리 함수들 [1]

IDL에서 제공되는 문자처리용 내장함수들 중 잘 알아두면 편리할만한 몇 개를 골라 순차적으로 소개할까 합니다. 문자열(String)은 IDL에서 사용되는 데이터의 자료형(Type)들 중 하나로서, 정수나 실수같은 자료형보다는 약간 덜하지만 그래도 상당히 자주 사용됩니다. 그리고 문자형 데이터를 잘 다룰 수 있다면 프로그래밍이 상당히 편해지는 부분이 많습니다. IDL에서도 이를 위한 문자형 데이터 전용 내장함수들이 여럿 제공되는데, 자세한 내용은 IDL 도움말의 Contents – Routines (by Topic) – String Processing 섹션의 내용을 참조하면 됩니다. 저는 이들 중 몇 개만 소개하려 합니다.

1. STRING

형변환 함수로서 다른 형의 데이터를 문자형 데이터로 변환합니다. 대개의 경우 숫자값을 문자값으로 바꿀 때 사용합니다. 그리고 FORMAT이라는 키워드를 사용하여 일정한 형식에 맞는 문자값이 되도록 세부적인 설정도 할 수 있습니다. FORMAT 키워드를 사용한 예제는 다음과 같습니다.

IDL> a = 3.5
IDL> a_str = STRING(a, FORMAT='(F5.1)’)
IDL> PRINT, a_str
3.5

여기서는 맨 앞에 공백(space) 두 칸을 먼저 띄고 3.5라는 값으로 출력됩니다. 물론 FORMAT 키워드를 사용하지 않아도 됩니다. 하지만 그 경우에는 숫자를 문자로 바꿀 때 숫자 앞부분의 공백의 갯수를 알아서 할당하기 때문에 가급적이면 위와 같이 FORMAT 키워드를 사용하는게 바람직합니다. FORMAT 키워드에 들어가는 형식인자의 문법은 기본적으로 포트란에서와 같은데, 좀 더 세부적인 내용은 이 함수의 도움말에서 찾아볼 수 있습니다.

2. STRMID

문자열에서 원하는 위치로부터 원하는 갯수만큼의 문자들만 뽑아내는 기능을 합니다. 예를 들어 특정한 날짜에 대한 정보가 다음과 같은 문자열로 주어졌을 경우, 여기서 년, 월, 일 등의 값을 뽑아내는 작업을 이 함수를 사용하여 할 수 있습니다.

IDL> dstr = ‘201301151830’
IDL> year = STRMID(dstr, 0, 4)
IDL> month = STRMID(dstr, 4, 2)
IDL> day = STRMID(dstr, 6, 2)

이와 같이 2013년 1월 15일 18시 30분을 의미하는 문자열이 있을 경우, 여기서 년, 월, 일에 해당되는 문자열만 따로 뽑아낼 수 있습니다. STRMID 함수의 첫번째 인자는 대상 문자열이 되고, 두번째 인자는 뽑아낼 위치의 인덱스, 세번째 인자는 뽑아낼 문자의 갯수입니다. 따라서 year의 경우는 0번째 위치로부터 4개를 뽑아낸 것이고, month의 경우는 4번째 위치로부터 2개를 뽑아낸 것이 됩니다. 문자의 위치를 나타내는 인덱스는 무조건 0부터(1부터가 아님) 시작한다는 점만 유의하면 됩니다. 이와 같이 뽑아낸 년, 월, 일 값의 자료형은 아직은 문자형입니다. 만약 정수형의 값으로 변환하고자 한다면 FIX와 같은 내장함수를 추가로 사용하면 됩니다. 즉 다음과 같이 하면 되겠죠.

IDL> day = FIX(STRMID(dstr, 6, 2))

3. STRTRIM

이 함수는 문자열의 앞/뒤에 존재하는 불필요한 공백을 제거하는 역할을 합니다. 앞서 소개된 STRING 함수로 변환된 문자값이 불필요한 공백을 갖는다면 이 STRTRIM 함수를 추가적으로 사용하여 공백을 제거할 수 있습니다. 예를 들어 3.5라는 값을 문자로 변환하여 바로 출력을 하면 다음과 같이 앞부분에 불필요한 공백이 존재합니다.

IDL> PRINT, STRING(3.5)
3.50000

이 때 다음과 같이 STRTRIM 함수를 사용하면 이러한 불필요한 공백을 제거할 수 있습니다.

IDL> PRINT, STRTRIM(STRING(3.5), 2)
3.50000

여기서 STRTRIM 함수의 두번째 인자의 값은 대상 문자열의 앞부분만 또는 뒷부분만 또는 앞뒤 모두 공백을 없앨 것이냐를 결정합니다. 여기서는 2가 사용되었는데, 그러면 문자열의 앞뒤 모두 확인해서 공백을 무조건 제거하게 됩니다.

이상으로 일단 세 개의 문자처리 함수들을 소개해보았습니다. 각 함수에 대한 더 자세한 내용은 IDL 도움말을 참조하면 됩니다.