⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbfparse.pro

📁 basic median filter simulation
💻 PRO
字号:
pro dbfparse, spar, items, stype, values;+; NAME:;     DBFPARSE; PURPOSE:;     Parse the search string supplied to DBFIND.   Not a standalone routine;; CALLING SEQUENCE:;     DBFPARSE, [ spar, items, stype, values ];; INPUTS:;     spar - search parameter specification, scalar string;; OUTPUTS:;     items - list of items to search on;     stype - search type, numeric scalar;               0    item=values(j,0);               -1   item>values(j,0);               -2   item<values(j,1);               -3   values(j,0)<item<values(j,1);               -4   item is non zero;               -5   item=values(j,0) within tolerance values(j,1);               0<   items in list values(j,i) for i=0,stype-1;     values - search values, 20 x 10 string array, can parse a string;               with up to 20 items specifications, each item can have 10;               values;; REVISION HISTORY:  ;     D. Lindler NOV, 1987;     Check for valid numeric values before assuming a date string;     W. Landsman                    July, 1993;     Accept four digit years when in ccyy/doy format W. Landsman   October 1998;     Don't do DATE/Time test for string items  W. Landsman   July 2006;-;-------------------------------------------------------------- On_error,2;; parse string array search parameters into a single string.;  par  = strjoin( strtrim( spar, 2),',')    ;Make into a scalar if necessary   items = strarr(20)                 ;array of items  values = strarr(20,10)              ;range limited to 10 elements/item.  stype = intarr(20)                  ;search type for item j                                        ;   0    item=values(j,0)                                        ;   -1   item>values(j,0)                                        ;   -2   item<values(j,1)                                        ;   -3   values(j,0)<item<values(j,1)                                        ;   -4   item is non zero                                        ;   -5   item=values(j,0) within                                        ;         tolerance values(j,1)                                        ;   0<   items in list values(j,i)                                        ;             for i=0,stype-1;; parse par;nitems  = 0while par ne '' do begin                 ;  ;  Concatenated array. A normal seach involves using comma's as  ;    delimiter. For concatenation array, the brackets must be  ;    found (both beginning and end) prior to extracting item  ;    search information. This is done once at a time as each  ;    search item is deciphered.  ;    strparam = strpos(par,'[')    if (strparam lt strpos(par,',')) and (strparam gt 0) then begin       next = gettok(par,']')             ; just the concatenation portion.       next = next + ']'                  ; put it back.       par=strtrim(par,2)                 ; trim blanks       par  = strmid(par,1,strlen(par)-1) ; eat next comma.    end else next=gettok(par,',')         ; get next search item    par=strtrim(par,2)                    ;trim blanks    case 1 of    ;    ;    Concatenation array...    ;       item=[value1,value2,...]    ;    (strpos(next,'[') gt 0): begin       ; explicit range.             items[nitems]=gettok(next,'='); get item name           ;           ; that leaves brackets and indices.           ;             junk = gettok( next, '[' )             vals = gettok( next, ']' )             nvals=0             while vals ne '' do begin                values[nitems,nvals]=gettok(vals,',')                nvals=nvals+1                if nvals GE 10 then message, $     'No more than 10 values/item allowed; use DBMATCH or DBGET instead'             endwhile             stype[nitems] = nvals             end    ;    ;  item=value(tolerance)     ;    (strpos(next,'=') gt 0): begin      ; equality specified             items[nitems]=gettok(next,'='); get item name             values[nitems,0]=gettok(next,'('); value for item             stype[nitems]=0             if next ne '' then begin   ;tolerance supplied                values[nitems,1]=gettok(next,')')                stype[nitems] = -5             end             end    ;    ; minimum supplied?   item>value    ;    (strpos(next,'>') gt 0): begin             items[nitems]=gettok(next,'>');get item name             values[nitems,0]=next         ;get minimum value             stype[nitems]=-1             end    ;    ;  Range specified or maximum specified.    ;      (strpos(next,'<') gt 0): begin    ; form is min<item<max             ltpos=strpos(next,'<')             if strpos(next,'<',ltpos+1) ge 0 then begin        ;        ;  range specified   value1<item<value2        ;                values[nitems,0]  = gettok(next,'<')    ;minimum value                items[nitems] = gettok(next,'<')        ; get item name.                values[nitems,1]=next                   ;whats left is max.                stype[nitems]=-3               end else begin        ;        ;  maximum specified        ;                items[nitems] = gettok(next,'<')                values[nitems,1]=next                stype[nitems]=-2             end           end        ;        ; non zero value specified  item not equal to 0        ;                     else: begin                items[nitems]=next                stype[nitems]=-4                end      endcase      nitems=nitems+1  end; while;; truncate arrarys down to proper number of items.;  items  = items[0:nitems-1]  values = values[0:nitems-1,*]; convert data/time and ra, dec to real numbers (special user mode). n = N_elements(values) db_item,items,it,ivalnum,idltype idltype = rebin(idltype,n); loop on elements in vals for i = 0,n-1 do begin        if idltype[i] NE 7 then begin        v = strtrim(values[i]); is it of the form DD-MMM-YYYY hh:mm:ss.ss        if (strpos(v,':') gt 0) and (strpos(v,'-') gt 0) then begin                val = date_conv(v)                v = string(val,'(d22.14)')        end; is it of form ccyy/ddd/hh:mm:sss?   (Two digit years are interpreted as ; 1900 + YY if YY GT 40, and 2000 + YY if YY LE 40.)        if strpos(v,'/') gt 0 then begin                v1 = v                val = 0.0d0                yr = strtrim( gettok( v1,'/'), 2 )                if yr EQ '' then goto, DATE                if strnumber( yr, num) then begin                        if num LT 40 then num = num + 2000 else $                        if ((num GT 40) and (num LT 100)) then num = num + 1900                        val = val + num*1000d0                        day = strtrim(gettok(v1,':'),2)                        if day EQ '' then goto,DATE                        if strnumber(day,num) then begin                             val = val + num                           hr = strtrim(gettok( v1,':'),2)                           if hr EQ '' then goto,DATE                           if strnumber( hr, num) then begin                                val = val + num/24.0d0                                mn = strtrim( gettok(v1,':'),2)                                if mn EQ '' then goto,DATE                                if strnumber( mn, num) then begin                                        val = val + num/24.0d0/60.0                                        sc = strtrim(v1,2)                                        if sc EQ '' then goto, DATE                                        if strnumber(sc,num) then begin                                            val = val + num/24.0d0/3600.0                                           goto, DATE                                         endif                                endif                            endif                         endif                      endif                 goto, NOT_DATEDATE:           v = string(val,'(d22.14)')        endifNOT_DATE:;; is it of form hh:min:sec or deg:min:sec;        if strpos(v,':') gt 0 then begin                val  =0.0d0                           val = val+gettok(v,':')                sign = 1                if(val lt 0.0) then sign = (-1)                val = val+gettok(v,':')/60.0*sign                val = val+strtrim(v)/3600.0d0*sign                v = val        endif        values[i]=v endif endfor return end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -