IDL/Miscellaneous

JOURNAL 및 RECALL_COMMANDS의 사용

이상우_idl 2024. 4. 2. 15:02
728x90
반응형

IDL에서 작업을 하는데 있어서는 통상적으로 에디터에서 프로그램을 작성하고 이를 저장한 후 컴파일 및 실행을 함으로써 결과를 얻는 방식으로 진행하는 경우가 많습니다. 하지만 이러한 방식 외에도 그냥 IDL의 커맨드 프롬프트에서 한 줄씩 명령을 입력하고 실행하는 방식으로 간단하게 작업을 하는 경우도 꽤 있습니다. 예를 든다면 다음과 같은 경우입니다.

 

IDL> a = 5
IDL> b = 9
IDL> c = a+b
IDL> PRINT, a, b, c
       5       9      14

 

그런데 이렇게 한 줄씩 실행했던 내용들을 그냥 흘려보내지 않고 나중에 다시 가져와서 재활용하고 싶을 경우도 분명히 있을 것입니다. 물론 IDL에서는 그러한 기능을 지원하는데 바로 JOURNAL 명령 및 RECALL_COMMANDS 함수입니다. 그래서 오늘은 IDL의 커맨드 프롬프트에서 작업했던 내용들을 저장해두었다가 다시 재활용하기 위하여 이 두가지 기능을 사용하는 방법을 소개해보고자 합니다.

 

 

< 1 > JOURNAL 명령

 

먼저 JOURNAL 명령커맨드 프롬프트에서 작업했던 내용을 파일로 저장하는 역할을 합니다. 이 때 저장되는 파일의 형식은 IDL의 프로그램 파일인 .pro가 될 수도 있고 그냥 txt와 같은 일반적인 텍스트 파일이 될 수도 있습니다. 이 명령을 사용하는 방식의 예제는 다음과 같습니다.

 

IDL> JOURNAL, 'mywork.pro'

 

이와 같이 IDL 커맨트 프롬프트에서 JOURNAL 명령과 함께 파일의 이름도 함께 적어줍니다. 그러면 이 명령이 실행된 직후부터 커맨드 프롬프트에서 입력 및 실행되는 모든 내용은 mywork.pro라는 파일에 저장됩니다. 다만 내용 저장이 제대로 되려면 마지막에 JOURNAL 명령을 한번 더 실행해줘야 합니다. 앞서 서두에서 작업했던 내용을 이와 같은 방식으로 저장하는 전체 과정을 보면 다음과 같습니다.

 

IDL> JOURNAL, 'mywork.pro'

IDL> a = 5
IDL> b = 9
IDL> c = a+b
IDL> PRINT, a, b, c
       5       9      14

IDL> JOURNAL

 

즉 이러한 방식으로 진행하면 JOURNAL 명령이 처음 실행된 이후부터 마지막 실행되기 직전까지의 내용이 모두 파일에 저장된다는 것을 유념하면 됩니다. 이렇게 저장된 mywork.pro를 IDL에서 열어보면 그 내용은 대략 다음과 같습니다.

 

; IDL 9.0.0 (Win32 x86_64 m64)
; Journal File for 계정@PC이름
; Working directory: D:\IDL
; Date: Mon Mar 28 16:10:11 2024
 
a = 5
b = 9
c = a+b
PRINT, a, b, c
;       5       9      14

 

이와 같이 유저의 PC 및 IDL 버전에 관한 정보가 주석문으로 먼저 등장하고 핵심적인 실행 내용이 수록되는 방식입니다. 그리고 이미 언급했듯이 .pro 파일뿐 아니라 .txt 파일과 같은 일반적인 텍스트 파일로도 저장할 수 있습니다. 그리고 처음에 JOURNAL 명령을 사용하면서 파일명을 명시해주지 않을 경우에는 IDL이 알아서 idlsave.pro라는 파일로 저장되도록 해줍니다. 어쨌든 JOURNAL 명령을 사용하면 IDL의 커맨드 입력창에서 입력 및 실행되는 내용을 파일로 저장할 수 있습니다. 다만 사용에 있어서는 위의 예제에서 보았듯이 내용의 저장을 시작하고자 할 때와 끝맺음을 할 때를 유저가 명확히 지정해줘야 합니다.

 

 

< 2 > RECALL_COMMAND 함수

 

RECALL_COMMANDS 함수IDL의 커맨드 프롬프트에서 실행된 내용들을 문자값 배열의 형태로 가져오는 역할을 합니다. 즉 커맨드 프롬프트에서 최근까지 입력 및 실행되었던 내용들을 일정 갯수의 문자값들로 구성된 배열로 가져오게 되는데, 기본적인 방식은 최근 500개의 내용들을 문자 배열로 가져오게 됩니다. 즉 예를 들면 다음과 같습니다.

 

IDL> a = 5
IDL> b = 9
IDL> c = a+b
IDL> PRINT, a, b, c
       5       9      14
IDL> r = RECALL_COMMANDS()

 

이와 같이 RECALL_COMMANDS 함수를 사용하면 커맨드 프롬프트에서 실행된 최근 500개의 명령들에 해당되는 문자값들로 구성된 배열을 가져오게 됩니다. 이와 같이 추출된 r에 대한 정보 및 내용을 확인해보면 다음과 같습니다.

 

IDL> HELP, r
R               STRING    = Array[500]
IDL> PRINT, r[0]
r = RECALL_COMMANDS()
IDL> PRINT, r[1]
PRINT, a, b, c
IDL> PRINT, r[2]
c = a+b
IDL> PRINT, r[3]
b = 9
IDL> PRINT, r[4]
a = 5

 

이와 같이 배열 r의 값들을 하나씩 출력해보면 가장 최근에 입력 및 실행되었던 내용들부터 순서대로 저장되어 있음을 확인할 수 있습니다. 그리고 RECALL_COMMANDS 함수에 의하여 추출되는 문자 배열의 원소 갯수 500개라는 수치는 IDL의 기본 설정에 따른 것입니다. 물론 이 갯수는 얼마든지 변경이 가능합니다. 변경은 IDL의 설정(Preference)에서 할 수 있습니다. 설정 인터페이스에서 다음과 같이 IDL 탭의 히스토리 크기라는 항목인데 이 값이 아마 다음과 같이 500으로 설정되어있을 것입니다. 따라서 필요하다면 이 500이란 값을 유저가 직접 변경하면 됩니다.

 

 

그래서 정리를 해보면, 처음에 소개된 JOURNAL 명령의 경우는 내용 저장을 시작할 시점과 끝낼 시점을 유저가 직접 지정해야 한다는 특성이 있습니다. 반면 RECALL_COMMANDS 함수의 경우는 그냥 최근의 실행 내용들을 일정 갯수만큼 가져온다는 특성이 있습니다. 따라서 지난 기록을 가져오는데 있어서 유저가 원하는 방식에 맞춰서 선택적으로 활용하면 됩니다. 어쨌든 IDL의 커맨드 프롬프트에서 한 줄씩 입력 및 실행하면서 작업했던 내용을 나중에도 활용할 수 있도록 해주는 편의성 기능으로서 위의 두가지 기능이 지원되고 있음을 잘 염두에 두시면 좋을 것 같습니다.

반응형