IDL/Data Type & Format

문자형 값에 대하여 숫자냐 문자냐 여부를 구분하려면?

이상우_idl 2015. 2. 23. 15:29
728x90
반응형

제가 글재주가 없어서 제목의 내용이 어떤 의미인지 표현이 약간 모호한데요. 예를 들어 다음과 같은 두 개의 문자형 값이 존재한다고 합시다.


a = '32'

b = 'abcd'


엄밀히 따지면 둘 다 문자형(String) 값이긴 합니다. 하지만 a의 실제 내용은 숫자이고 b의 실제 내용은 그야말로 문자입니다. 프로그래밍을 하다보면 이것을 구분해내야 하는 경우가 간혹 생깁니다. 어떻게 해결해야 할까요? 이럴 때 가장 먼저 떠올릴 수 있는 IDL의 내장함수라면 TYPENAME이나 ISA 등이 있긴 하지만, 이러한 내장함수들만으로는 좀 부족합니다. 이들은 '32'와 32가 문자형 및 정수형이라는 구분을 해주는 역할은 하지만, 둘 다 문자형인 '32'와 'abcd'의 실제 내용이 숫자냐 문자냐까지 구분해주지는 못하기 때문입니다. 따라서 원론적으로 따지면 약간의 기술적인 프로그래밍이 필요한데, 그리 쉽지만은 않은 문제이기도 합니다.


따라서 내장 라이브러리에 이런 기능이 없다면 외부 라이브러리에서 적합한 것이 있는지 찾아보는 것이 좋을 수 있습니다. 다행히도 그런 기능을 하는 함수가 존재합니다. IDL계에서는 유명한 IDL Astro 라이브러리에 있는 VALID_NUM이라는 함수를 사용하면 됩니다. 그러면 다음과 같이 우리가 원하는대로 구분을 해줍니다.


IDL> PRINT, VALID_NUM('32')

   1

IDL> PRINT, VALID_NUM('abcd')

   0


둘 다 문자형 값을 대상으로 하였지만, '32'에 대해서는 실제 내용이 숫자임을 잘 알려줍니다. 이 프로그램의 소스코드는 IDL Astro 라이브러리를 통째로 받아서 설치한 후 IDL의 경로로 지정한 상태에서 사용할 수도 있고, 아래 링크에서 직접 받아서 사용하는 것도 가능합니다.


http://idlastro.gsfc.nasa.gov/ftp/pro/misc/valid_num.pro


사실 이 VALID_NUM의 소스코드를 보면 가장 중요한 역할을 하는 것이 바로 STREGEX라는 IDL의 내장함수입니다. 문자형 값에 대하여 내가 원하는 형식과 조건을 갖고 있는가를 세세하게 체크할 수 있는 기능을 수행하는 함수인데, 그 내막은 좀 복잡합니다. 정규표현식이라는 체계에 대한 이해가 필요합니다. 혹시라도 관심있으신 분들은 좀 오래된 내용이긴 하지만 아래 링크의 내용을 참조하시면, 이러한 문자 정규표현식 체계에 대한 이해에 도움이 될 것 같습니다.


http://www.spweather.com/idluser/bbs/view.php?id=document&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=8

반응형