您的位置:首页 > 其它

StringToDoubleArray函数:IDL中将字符串转换为double类型的数组

2011-03-27 22:06 351 查看
;==============================================================
;StringToDoubleArray
;==============================================================
Function StringToDoubleArray,DblStr,DoubleArray,Count
;用法IDL>Status=StringToDoubleArray(DblStr,DoubleArray,Count)
;DblStr要转换的字符串,字符串可以是'1.23 ,3.4;0.3  E2.2 afd 3er.7 '
;DoubleArray保存double类型的数组
;Count总共可以提取多少个double类型的数
;返回是否成功的标志

;测试版本IDL6.x,7.x不支持正则表达式
;----------------------------------------------------------------
Count=0
;----------------------------------------------------------------
;先对/t处理一下
Stab=STRSPLIT(DblStr, STRING(9b),/EXTRACT)
str=STRJOIN(Stab, ' ')
Si=STRSPLIT(Str,'[;,: ]',/EXTRACT,/REGEX)
;----------------------------------------------------------------
nn = n_elements(Si)
;----------------------------------------------------------------
if (nn GT 0) then begin
DoubleValue=findgen(nn)
LineSize=UINDGEN(nn)
;------------------------------------
for n=0L,nn-1 DO BEGIN
valid=IsDoubleString(Si
)
if (valid GT 0) then begin
DoubleValue
=fix(Si
,type=5)
LineSize
=1;
endif else begin
DoubleValue
=0
LineSize
=0;
endelse
endfor
;------------------------------------
count=total(LineSize);
index=where(LineSize GT 0)
;------------------------------------
if (count GT 0) then begin
DoubleArray=DoubleValue[index]
endif
;------------------------------------
return,1
;------------------------------------
endif else begin
return,0
end
;----------------------------------------------------------------
END

;下面这个是识别一个字符串是否是double类型的数字

function IsDoubleString,dblstr
;用法IDL>Status=IsDoubleString(dblstr)
;Status=0或1,成功为1,否则为0
;以下识别正确的话,肯定可以使用:
;IDL>DoubleValue=fix(dblstr,type=5)转换为double数字
;--------------------------------------------------------------
Status=1;假设可以转换
;先去掉首尾空格
str = STRTRIM(dblstr,2)
;---------------------------------------------
;查找并去掉末尾的非法字符
pos = STREGEX(str, '([^0-9.eE+-]|[+-.][Ee]|[eE].)')
if pos GT -1 then begin
str=strmid(str,0,pos)
endif
;---------------------------------------------
;转换为ASCII
inputstr = 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=0
endif else begin
;如果字符的长度小于1,也不是合法字符
Status=0
endelse
;---------------------------------------------
;判断第二个字符的合法性
if nn GT 1 then begin
SecondDoubleStr=byte('1234567890.Ee')
index=where(SecondDoubleStr eq inputstr[1],count)
if count eq 0 then Status=0
endif
;---------------------------------------------
;查找字符串中数字的总数,不能小于1
num_total=0
NumberStr=byte('1234567890')
for n=0L,nn-1 DO BEGIN
count=0;
index=where(NumberStr eq inputstr
,count)
num_total=count+num_total
endfor
if num_total LT 1 then Status=0
;=================================
;后续处理
;if Status eq 1 then begin
;print,fix(dblstr,type=5)
;endif
;=================================
;---------------------------------------------
return,Status
End
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: