IDL에서의 작업에 있어서 디렉토리의 설정은 여러가지 측면에서 꽤 중요합니다. 작성한 프로그램 파일들(.pro 파일들)의 저장 또는 프로그램 내에서 읽거나 작성할 파일들의 위치 등을 제어하는데 있어서 반드시 필요하기 때문입니다. 오늘은 IDL에서 디렉토리 설정법에 관한 개요 및 몇가지 중요한 팁들을 소개해보도록 하겠습니다.
< 현재 디렉토리 (Current Directory) >
IDL에서 "현재 디렉토리"는 말 그대로 IDL에서 현재 작업중인 디렉토리를 뜻합니다. 예를 들어 IDL에서 "파일 열기" 버튼을 눌러서 파일 브라우저를 띄우면 "현재 디렉토리" 내에 있는 프로그램 파일들이 우선적으로 보이게 됩니다. 그리고 IDL 프로그램에서 텍스트 또는 그림 파일을 저장하면 "현재 디렉토리" 내에 그 파일이 생성됩니다. 현재 디렉토리는 따로 변경을 하지 않으면 디폴트로는 그 PC 내에서의 유저 디렉토리가 되는데, 다른 디렉토리로 변경하여 설정하는 것도 당연히 가능합니다. IDL 프로그래밍의 작업 마당이 되는 유저 인터페이스를 IDLDE(IDL Development Environment) 또는 워크벤치(Workbench)라고 합니다. 여기서 우측 하단부를 보면 현재 디렉토리(Current Directory)라는 항목이 보입니다.
위의 그림에서 붉은 사각형으로 표시된 부분인데 좀 더 확대해서 보면 다음과 같습니다.
IDL을 설치한 후 별도의 설정을 하지 않았다면 아마 위와 같이 현재 디렉토리가 그 PC의 유저 디렉토리로 설정된 디폴트 상태일 것입니다. 만약 현재 디렉토리를 다른 디렉토리로 변경하려면 위에서 화살표로 지시된 서류 폴더 모양의 Browse 버튼을 누르고 직접 변경하면 됩니다. 또한 다수의 디렉토리들을 현재 디렉토리로 설정해두는 것도 가능하며, 이렇게 설정해두면 그 흔적이 저장되므로 나중에도 풀다운 버튼을 통하여 간단히 스위칭하면서 여기저기 왔다갔다 할 수도 있습니다.
< 작업 디렉토리 (Working Directory) >
그런데 IDL을 종료했다가 다시 실행하면 현재 디렉토리는 항상 디폴트 상태로 복귀합니다. 물론 이전에 따로 등록했던 "현재 디렉토리"들의 흔적은 여전히 남아있지만, 어쨌든 IDL을 종료 후 다시 실행하면 항상 디폴트 상태로 돌아갑니다. 따라서 IDL이 새로 실행될 때마다 내가 원하는 디렉토리가 현재 디렉토리로 설정된 상태가 되도록 하고 싶을 수도 있습니다. 그렇게 하려면 IDL의 설정(Preference) 인터페이스에서 "초기 작업 디렉토리"를 내가 원하는 디렉토리로 설정해두면 됩니다. 참고로 설정 인터페이스를 띄우려면 윈도우즈용 IDL에서는 상단 메뉴바에서 창(Window)->Preference 버튼 그리고 Mac OS용 IDL에서는 상단 메뉴에서 IDL->Preference 버튼을 누르면 됩니다. 설정 인터페이스 화면의 모습은 다음과 같습니다.
예를 들어 위와 같이 설정해두면 IDL을 실행할 때마다 현재 디렉토리가 C:\IDL로 자동으로 설정됩니다. 이와 같이 유저의 필요에 따라서 초기 작업 디렉토리를 설정해두면 여러모로 편리합니다.
< 파일의 디렉토리 경로 >
IDL에서 작업을 하면서 여러가지 외부 파일들을 사용해야 할 경우가 많습니다. 텍스트 파일 또는 그림 파일을 읽어야 하는 경우 뿐 아니라 이러한 파일을 생성해야 하는 경우도 포함됩니다. 예를 들어 어떤 그림 파일을 읽기 위하여 다음과 같이 코딩을 했다고 가정합시다.
file = 'test.jpg'
READ_JPEG, file, img
이와 같이 특정한 JPG 파일을 읽어서 그 데이터를 img라는 배열로 가져오겠다고 한다면, IDL은 그 JPG 파일을 탐색하게 됩니다. 탐색의 대상이 되는 위치는 바로 "현재 디렉토리"가 됩니다. 즉 이와 같이 특정한 대상 파일에 대하여 그 파일의 이름만 주어질 경우에는 IDL은 이 파일이 현재 디렉토리에 있을 것으로 간주하고 거기서 그 파일을 탐색하게 됩니다. 만약 이 현재 디렉토리가 위에서 설정했던 것과 같이 C:\IDL이라면, 결국 IDL은 C:\IDL 디렉토리 내에서 test.jpg라는 파일을 탐색합니다. 따라서 작업이 문제없이 진행되도록 하려면 C:\IDL 디렉토리 내에 test.jpg 파일이 실제로 존재해야 합니다. 만약 현재 디렉토리가 중간에 다른 디렉토리로 변경된다면 IDL은 그 JPG 파일을 찾지 못할 것이고 결국 에러가 발생할 것입니다. 따라서 그런 상황을 방지하기 위하여 절대 경로까지 다 적어주는 것도 하나의 방법이 될 수 있습니다. 즉 다음과 같이 적어주는 것입니다.
file = 'C:\IDL\test.jpg'
READ_JPEG, file, img
이렇게 해두면 혹시나 중간에 현재 디렉토리가 변경되더라도 대상 JPG 파일을 읽는 데에는 별다른 문제가 없을 것입니다. 이번에는 다음과 같은 상황을 가정해봅시다.
file = 'data/test.jpg'
READ_JPEG, file, img
이 경우에는 JPG 파일을 어디서 탐색하게 될까요? 일단 이 상황은 상대적 디렉토리 경로로 명시된 경우에 해당됩니다. 이렇게 어떤 파일에 대한 디렉토리 경로가 상대적 경로로만 표기된 경우에는 그 뿌리가 현재 디렉토리와 동일한 것으로 간주됩니다. 따라서 만약 현재 디렉토리가 C:\IDL로 설정된 상태라면, 결국 C:\IDL\data 디렉토리 내에서 test.jpg 파일을 탐색하게 됩니다. 그런데 여기서 한가지 주목해야 할 것은 상대적 경로를 표시할 때 사용하는 / 기호입니다. 위의 내용대로라면 JPG 파일의 절대 경로가 C:\IDL\data/test.jpg로 표기되었다고 생각해도 전혀 이상하지 않습니다. 그런데 이렇게 \ 기호와 / 기호가 혼용되어도 괜찮을까요? 일단 윈도우즈 OS에서는 아무 문제가 없습니다. 즉 위와 같이 상대 경로를 나타낼 때 / 기호를 사용해도 되고
file = 'data/test.jpg'
또는 다음과 같이 \ 기호를 사용해도 당연히 괜찮습니다.
file = 'data\test.jpg'
그런데 윈도우즈가 아닌 다른 OS(Mac OS 또는 리눅스)에서는 오직 / 기호만 허용되고 \ 기호는 허용되지 않는다는 것을 반드시 유의해야 합니다. 따라서 어떤 OS에서든 그냥 / 기호로 사용하면 된다고 생각하는 것이 차라리 편할 수도 있습니다. 다만 경우에 따라서는 / 기호와 \ 기호의 구분이 중요할 수도 있는데 그럴 때에는 PATH_SEP 함수를 사용하는 것이 필요할 수 있습니다. 이 함수는 해당 OS에서 디렉토리 경로를 표시하는데 있어서 구분자(Separator)로 사용되는 기호를 알아서 찾아주는 역할을 합니다. 실제로는 다음과 같이 PATH_SEP() 값을 이용하면 됩니다.
PRINT, PATH_SEP()
이와 같이 직접 출력해보면 윈도우즈 OS에서는 \ 기호가 출력될 것이고 그 외 다른 OS에서는 / 기호가 출력될 것입니다. 따라서 다음과 같이 디렉토리 경로를 명시해주는 방법도 있다는 것을 참고로 알아두시면 좋습니다.
file = 'data'+PATH_SEP()+'test.jpg'
< CD 명령의 활용 >
CD 명령은 이름 그대로 디렉토리를 변경(Change Directory)하는 역할을 합니다. 정확히는 "현재 디렉토리"를 변경하는 역할입니다. 만약 현재 디렉토리의 하위에 있는 data라는 디렉토리로 현재 디렉토리를 변경하려면 다음과 같이 하면 됩니다.
CD, 'data'
그리고 현재 디렉토리의 상위 디렉토리로 현재 디렉토리를 변경하려면 다음과 같이 하면 됩니다.
CD, '..'
이와 같이 옮겨갈 목적지에 해당되는 디렉토리를 명시해주면 됩니다. 물론 목적지의 디렉토리 경로를 절대 경로로 표시해도 됩니다.
CD, 'C:\IDL\data'
이렇게 CD 명령을 사용하여 현재 디렉토리를 변경하는 것은 커맨드 입력창에서 뿐만 아니라 프로그램 내에서도 얼마든지 가능합니다. 따라서 프로그램의 실행 과정에서 필요에 따라서 디렉토리 위치를 중간에 변경해야 할 경우가 있다면 이 CD 명령을 활용하면 됩니다. 그리고 CD 명령에는 또 다른 유용한 기능이 있습니다.
CD, CURRENT=cdir
PRINT, cdir
이와 같이 CD 명령을 CURRENT 키워드와 함께 사용하면 현재 디렉토리가 어디인지에 대한 정확한 정보를 획득할 수 있습니다. 예를 들어 커맨드 입력창에서 다음과 같이 이러한 작업을 해볼 수도 있습니다.
IDL> CD, CURRENT=cdir
IDL> PRINT, cdir
C:\IDL
그러면 이와 같이 현재 디렉토리에 대한 정확한 정보를 문자값으로 돌려받을 수 있습니다. 이러한 작업은 당연히 프로그램 내에서도 가능하기 때문에, 프로그램의 실행 과정에서 현재 디렉토리의 위치에 대한 정확한 정보를 파악해야 할 필요가 있을 경우에는 이 방법을 활용하면 됩니다. 참고로 CD 명령과 CURRENT 키워드를 함께 사용하는 방법에 관해서는 제가 예전에 다른 게시물에서도 언급했던 바 있으므로 그 내용도 함께 참조하셔도 됩니다.
'IDL > Programming' 카테고리의 다른 글
WHILE 및 REPEAT 구문의 이해 (0) | 2023.02.10 |
---|---|
주프로그램과 부프로그램의 구성 및 운용 방식 (0) | 2022.04.01 |
FILE_INFO 함수의 활용법 (0) | 2022.03.02 |
HISTOGRAM 및 HIST_2D 함수의 활용 [2] (0) | 2022.01.06 |
HISTOGRAM 및 HIST_2D 함수의 활용 [1] (0) | 2022.01.04 |