IDL/Programming

포맷 코드 사용 관련 유용한 팁 하나 소개

이상우_idl 2017. 7. 10. 14:17
728x90
반응형

포맷(Format) 코드의 개념 및 사용법에 관한 내용은 제가 예전에 두 차례에 걸쳐 소개한 바가 있습니다.


링크 1

링크 2


오늘은 이러한 포맷 코드의 사용에 있어서 알아두면 은근히 도움이 될 것 같은 간단한 팁을 알려드릴까 합니다. 설명을 위하여 다음과 같이 자리수가 다양한 정수값들을 포맷코드 '(I7)'를 사용하여 출력해봅시다.


PRINT, 26*9L, FORMAT='(I7)'

PRINT, 427*9L, FORMAT='(I7)'

PRINT, 1852*9L, FORMAT='(I7)'

PRINT, 36274*9L, FORMAT='(I7)'


위 내용을 실행하면 출력결과는 다음과 같습니다. 당연히 '(I7)'에 의하여 필드 7를 확보해놓고 정수값들을 출력하기 때문에, 자리수가 남는 부분(숫자 앞부분)은 공백으로 채워지게 됩니다.


    234

   3843

  16668

 326466


그런데 이와 같은 짜투리 공백 없이 순수하게 숫자들만 출력하고 싶다면 어떻게 해야 할까요? 3843의 경우는 숫자가 네 개이므로 '(I4)'를 사용하면 됩니다. 하지만 16668의 경우는 숫자가 다섯 개이므로 '(I5)'를 사용해야 합니다. 즉, 숫자들만의 자릿수가 변화무쌍할 경우에는 I 기술자 뒤에 붙는 값이 계속 변화해야 한다는 뜻입니다. 하지만 값의 자릿수를 예측할 수 없는 경우에는 매번 숫자 자릿수를 매번 일일이 따져야 하는데 여간 번거로운 일이 아니겠죠. 그러나 이런 경우를 위한 간단한 팁이 있습니다. 바로 필드수를 0으로 설정하는 방법입니다. 즉 다음과 같이 위의 예제 코드에서 '(I7)'을 '(I0)'으로 바꾸기만 하면 됩니다.


PRINT, 26*9L, FORMAT='(I0)'

PRINT, 427*9L, FORMAT='(I0)'

PRINT, 1852*9L, FORMAT='(I0)'

PRINT, 36274*9L, FORMAT='(I0)'


그러면 출력결과는 다음과 같습니다. 즉 짜투리 공백 없이 숫자들만으로 출력이 된 셈입니다.


234

3843

16668

326466


이와 같은 원리는 실수의 경우에도 유사하게 적용됩니다. 다음은 F 기술자가 포함된 포맷 코드를 사용하여 실수값들을 출력하는 예제코드입니다. 여기서는 포맷코드 '(F7.2)'를 사용하여 전체 필드수는 7개 그리고 소수점 밑으로 두 자리까지 표기하도록 하였습니다.


PRINT, 34./7, FORMAT='(F7.2)'

PRINT, 526./7, FORMAT='(F7.2)'

PRINT, 2871./7, FORMAT='(F7.2)'

PRINT, 63148./7, FORMAT='(F7.2)'


이 출력결과는 다음과 같습니다. 역시나 값들의 자릿수가 다양하기 때문에 값 앞부분에 짜투리 공백이 발생하는 것을 볼 수 있습니다.


   4.86

  75.14

 410.14

9021.14


그러면 여기서도 짜투리 공백을 없애려면 앞서 정수 표기의 예제에서와 같이 포맷 코드안에 0이란 숫자를 넣으면 될 것 같다는 느낌은 옵니다. 그런데 0을 어디에 넣어야 할까요? 다음과 같이 포맷코드를 '(F0.2)'로 사용하면 됩니다.


PRINT, 34./7, FORMAT='(F0.2)'

PRINT, 526./7, FORMAT='(F0.2)'

PRINT, 2871./7, FORMAT='(F0.2)'

PRINT, 63148./7, FORMAT='(F0.2)'


이 출력결과는 다음과 같습니다. 소수점 밑으로 두 자리까지만 표기하는 것은 공통이지만, 소수점 앞부분의 자릿수가 몇 개가 되든 짜투리 공백없이 값들이 표기되는 것을 확인할 수 있습니다.


4.86

75.14

410.14

9021.14


그렇다면 이러한 방법이 문자의 경우에도 적용이 될까요? 맞습니다. 문자용 포맷코드에서 사용되는 A 기술자의 경우도 마찬가지입니다.이에 관해서는 긴 설명 없이 바로 예제코드 및 출력결과를 아래에 적습니다. 보시면 금방 이해가 가실겁니다.


예제코드


PRINT, 'ABC', FORMAT='(A7)'

PRINT, 'ABCD', FORMAT='(A7)'

PRINT, 'ABCDE', FORMAT='(A7)'

PRINT, 'ABCDEF', FORMAT='(A7)'

PRINT, ''

PRINT, 'ABC', FORMAT='(A0)'

PRINT, 'ABCD', FORMAT='(A0)'

PRINT, 'ABCDE', FORMAT='(A0)'

PRINT, 'ABCDEF', FORMAT='(A0)'


출력결과


    ABC

   ABCD

  ABCDE

 ABCDEF


ABC

ABCD

ABCDE

ABCDEF


오늘 소개한 내용은 결국 포맷 코드 사용에 있어서 필드수를 0으로 설정하는 것도 하나의 유용한 요령이 될 수 있다는 것입니다. 이 팁을 잘 알아두시면 포맷 코드의 사용에 있어서 아마 여러모로 도움이 될 것이라 생각합니다.

반응형