在IDL中识别一个字符串是否可以转换为double数字的函数IsDoubleString

来源:互联网 发布:美工和平面设计 编辑:程序博客网 时间:2024/05/16 01:45
function IsDoubleString,dblstr;用法IDL>Status=IsDoubleString(dblstr);Status=0或1,成功为1,否则为0;以下识别正确的话,肯定可以使用:;IDL>DoubleValue=fix(dblstr,type=5)转换为double数字;测试版本6.X,不要再IDL 7.x中使用,测试时发现内置函数STREGEX有问题;--------------------------------------------------------------Status=1;假设可以转换;先去掉首尾空格str = STRTRIM(dblstr,2);---------------------------------------------;查找并去掉末尾的非法字符pos = STREGEX(str, '([^0-9.eE+-]|[+-.][Ee]|[eE].)')if pos GT -1 then beginstr=strmid(str,0,pos)endif;---------------------------------------------;转换为ASCIIinputstr = byte(str);获取字符个数nn = n_elements(inputstr);---------------------------------------------;判断第一个字符的合法性if nn GT 0 then begin FirstDoubleStr=byte('+-1234567890.') index=where(FirstDoubleStr eq inputstr[0],count) if count eq 0 then Status=0endif else begin ;如果字符的长度小于1,也不是合法字符 Status=0endelse;---------------------------------------------;判断第二个字符的合法性if nn GT 1 then begin SecondDoubleStr=byte('1234567890.Ee') index=where(SecondDoubleStr eq inputstr[1],count) if count eq 0 then Status=0endif;---------------------------------------------;查找字符串中数字的总数,不能小于1num_total=0NumberStr=byte('1234567890')for n=0L,nn-1 DO BEGIN count=0; index=where(NumberStr eq inputstr[n],count) num_total=count+num_totalendforif num_total LT 1 then Status=0;=================================;后续处理;if Status eq 1 then begin;print,fix(dblstr,type=5);endif;=================================;---------------------------------------------return,StatusEnd