IDL에서는 문자값을 정의할 때 항상 따옴표를 사용하는데, 따옴표는 싱글 또는 더블 모두 가능합니다. 즉 다음 두 경우는 모두 같은 결과를 출력합니다.
PRINT, 'IDL 8.9 is now available'
PRINT, "IDL 8.9 is now available"
그런데 만약 다음과 같은 문장을 출력하고 싶다고 합시다.
There are 43 persons in this class
그리고 저 43이라는 값이 n이라는 변수에 저장된 상황을 가정합니다. 그러면 위와 같은 문장을 출력하기 위해서는 기존에는 다음과 같은 문법으로 처리해야 했습니다.
n = 43
PRINT, 'There are '+STRTRIM(n, 2)+' persons in this class'
이것은 정수형 값 변수인 n을 문자값 내에 포함시키기 위하여 중간에 문자 처리 함수인 STRTRIM 함수가 사용된 경우입니다. 이와 같이 정수, 실수 등과 같은 자료형의 값을 문자값으로 출력하기 위해서는 문자형 변환 및 처리 함수들(STRING, STRTRIM 등)이 사용되는 것이 정석적인 처리 방법이었습니다. 이렇게 하면 출력 결과는 다음과 같습니다.
There are 43 persons in this class
그런데 이번 IDL 8.9에서 새로 도입된 Literal Strings 기능은 이러한 처리를 좀 더 직관적이고 간편하게 할 수 있도록 해주는 기능인데요. 여기서 Literal Strings라는 말은 "어떤 값을 보이는 그대로 문자처럼 삽입하여 처리한다"는 의미 정도로 생각하면 됩니다. 좀 더 구체적으로 얘기하자면, 숫자값을 문자 형태로 만들고자 할 때 문자형 처리 함수들을 따로 사용하지 않아도 되도록 한 것인데요. 앞선 예제의 경우 STRTRIM 함수를 별도로 사용하였는데, 이러한 작업을 IDL 8.9에서는 다음과 같은 방식으로 처리할 수도 있습니다.
PRINT, `There are ${n} persons in this class`
이 내용을 보면 그냥 변수 n만 달랑 들어가고 중간에 STRTRIM과 같은 별도의 변환 함수는 사용되지 않았습니다. 이렇게 처리해도 출력 결과는 동일합니다. 여기서는 문자값으로 넣고 싶은 변수 또는 값을 ${ }와 같은 표현을 사용하면서 { } 괄호 안에 적어주기만 하면 됩니다. 따라서 다음과 같이 실행해도 됩니다.
PRINT, `There are ${43} persons in this class`
그리고 { } 안에서 간단한 연산을 해도 됩니다. 즉 다음과 같이 처리할 수도 있습니다.
PRINT, `There are ${n+5} persons in this class`
이 경우의 출력 결과는 다음과 같습니다.
There are 48 persons in this class
그런데 여기서 주의할 것은 문자값을 감싸는 것이 그냥 따옴표(' 또는 ")가 아니라 ` 기호라는 것입니다. 이 기호를 백틱(Backtick) 기호라고 부르는데 다음과 같이 키보드 자판에서 왼쪽 상단 즉 Esc 키 바로 밑에 있습니다. 반드시 이 기호를 사용해야 한다는 점을 유의해야 합니다.
이러한 Literal Strings 기능은 실수형 값에 대해서도 적용 가능합니다. 이번에는 다음과 같은 예제를 살펴봅시다.
t = 0.316
str = `His batting average last season was ${t}`
PRINT, str
여기서는 0.316이라는 값을 담은 변수 t를 문자열에 바로 투입하였습니다. 출력된 결과를 보면 다음과 같습니다.
His batting average last season was 0.31600001
사실 제대로 출력된 것은 맞습니다만, 실수형이다보니 소수점 아래 자릿수에 대한 설정이 따로 더 필요할 것으로 보입니다. 이러한 설정은 다음과 같이 하면 됩니다.
str = `His batting average last season was ${t, "(F5.3)"}`
이와 같이 ${ } 안에서 값의 출력 형식에 대한 세부적인 설정이 가능합니다. 출력 결과는 다음과 같습니다.
His batting average last season was 0.316
그 외에도 Literal Strings 기능을 사용하면 다음과 같은 출력도 가능합니다.
b = [36, 55, 72, 49, 60]
PRINT, `The array b consists of ${b}`
이렇게 하면 배열 b의 값들을 모두 간편하게 출력에 반영할 수 있습니다. 출력 결과는 다음과 같습니다.
The array b consists of [36,55,72,49,60]
그리고 줄바꿈을 하는 Carriage Return도 다음과 같이 적용할 수 있습니다.
PRINT, `aaaa\rbbbb\rcccc`
이와 같이 Literal Strings 기능에서는 Carriage Return에 해당되는 역할을 \r이 수행합니다. 출력 결과는 다음과 같습니다.
aaaa
bbbb
cccc
Literal Strings 기능에 관해서는 이 정도로 정리를 해봅니다. 문자 처리의 관점에서 보면 여러모로 편리한 기능이라고 생각이 됩니다. 다만 이 기능은 IDL 8.9에서 도입된 것이므로 이전 버전의 IDL과는 호환되지 않는다는 점 그리고 일반 따옴표 대신 Backtick 기호를 사용해야 한다는 점들만 유의하시면 되겠습니다.
오늘 소개한 Literal Strings 기능에 관한 더 자세한 내용은 IDL 도움말의 Template Literal Strings라는 섹션 또는 관련 웹페이지를 참조하시면 됩니다.
'IDL > Programming' 카테고리의 다른 글
LABEL_DATE 함수의 활용법 (1) | 2024.09.24 |
---|---|
IDL 8.9에서 추가된 상수 정의 기능 (1) | 2023.06.29 |
음수 범위를 로그 스케일(Log Scale)로 표시하기 (0) | 2023.04.25 |
WHILE 및 REPEAT 구문의 이해 (0) | 2023.02.10 |
주프로그램과 부프로그램의 구성 및 운용 방식 (0) | 2022.04.01 |