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

📄 dbmatch.pro

📁 basic median filter simulation
💻 PRO
字号:
function dbmatch, item, values, listin, FULLSTRING = fullstring;+; NAME:;       DBMATCH; PURPOSE:;       Find the entry number in a database for each element of item values; EXPLANATION:;       DBMATCH() is especially useful for finding a one-to-one ;       correspondence between entries in different databases, and thus to ;       create the vector needed for database pointers.;; CALLING SEQUENCE:;       list = DBMATCH( item, values, [ listin, /FULLSTRING ] );; INPUTS:;       ITEM - Item name or number, scalar;       VALUES -  scalar or vector containing item values to search for.;; OPTIONAL INPUTS:;       LISTIN - list of entries to be searched.  If not supplied, or;               set to -1, then all entries are searched; OUTPUT:;       LIST - vector of entry numbers with the same number of elements as ;               VALUES.  Contains a value of 0 wherever the corresponding item;               value was not found.;; OPTIONAL INPUT:;       /FULLSTRING - By default, one has a match if a search string is ;               included in any part of a database value (substring match).   ;               But if /FULLSTRING is set, then all characters in the database;               value must match the search string (excluding leading and ;               trailing blanks).    Both types of string searches are case;               insensitive.;; NOTES:;       DBMATCH is meant to be used for items which do not have duplicate values;       in a database (e.g. catalog numbers).  If more than one entry is found;       for a particular item value, then only the first one is stored in LIST.;;       When linked databases are opened together, DBMATCH can only be ;       used to search on items in the primary database.;; EXAMPLE:;       Make a vector which points from entries in the Yale Bright Star catalog;       to those in the Hipparcos catalog, using the HD number;;       IDL> dbopen, 'yale_bs'            ;Open the Yale Bright star catalog;       IDL> dbext, -1, 'HD', hd          ;Get the HD numbers;       IDL> dbopen, 'hipparcos'          ;Open the Hipparcos catalog;       IDL> list = dbmatch( 'HD', HD)    ;Get entries in Hipparcos catalog ;                                         ;corresponding to each HD number.; PROCEDURE CALLS:;       DB_ITEM, DB_ITEM_INFO(), DBEXT, DBFIND_SORT(); REVISION HISTORY:;       Written,    W. Landsman      STX     February, 1990;       Fixed error when list in parameter used May, 1992;       Faster algorithm with sorted item when listin parameter supplied ;       Added keyword FULLSTRING,check for empty database, William Thompson, ;               GSFC, 15 March 1995;       Work for more than 32767 values, added CATCH W. Landsman   July 1997;       Change some loop variables to type LONG,  W. Landsman  July 1999;       Remove loop for substring searches (faster)  W. landsman August 1999;       Replace DATATYPE() with size(/TNAME)  W. Landsman  November 2001;       Fixed typo when search on sorted items W. Landsman February 2002;       Fixed bug from Nov 2001 where /FULLSTRING was always set.  W.L Feb 2007;- On_error,2 if N_params() LT 2 then begin     print,'Syntax --  list = DBMATCH( item, values, [ listin, /FULLSTRING] )'     return,-1 endif  catch, error_status if error_status NE 0 then begin         print,!ERR_STRING        if N_elements(listin) NE 0 then return,listin else return, -1 endif nvals = N_elements( values ) if nvals EQ 0 then message, $        'ERROR - No search values (second parameter) supplied' if N_params() LT 3 then listin = lonarr(1) - 1 db_item,item,itnum index = db_item_info( 'INDEX', itnum)           ;Get index type of item list = lonarr( nvals ) nentries = db_info('entries') if nentries[0] eq 0 then begin                 ;Return if database is empty        message,'ERROR - No entries in database ' + db_info("NAME",0),/INF        return,listin*0 endif  if index[0] GE 2 then begin                      ;Sorted item    if listin[0] NE -1 then min_listin = min( listin, MAX = max_listin)    for i = 0l,nvals-1 do begin        val = [values[i],values[i]];       We don't supply the LISTIN parameter directly to DBFIND_SORT.  Since;       we know that we need only 1 match for each item value, we can do;       the restriction to the LISTIN values faster than DBFIND_SORT can        tmplist = -1        dbfind_sort,itnum[0],1,val, tmplist, $    ;Search all entries to start                fullstring=fullstring, Count = Nmatch_sort            if ( listin[0] NE -1 ) then begin                if Nmatch_sort EQ 0 then goto, FOUND_MATCH                good = where( ( tmplist LE max_listin ) and $                               ( tmplist GE min_listin ), Ngood)                if ( Ngood EQ 0 ) then goto, FOUND_MATCH                tmplist = tmplist[good]                for j = 0L, Ngood - 1  do begin                   test = where( listin EQ tmplist[j], Nfound )                    if Nfound GE 1 then begin                         list[i] = tmplist[j]                         goto, FOUND_MATCH                   endif                endfor          endif else if ( Nmatch_sort GT 0 ) then list[i] = tmplist[0]         FOUND_MATCH:   endfor  endif else begin                                 ;Non-sorted item    if listin[0] EQ -1 then tmplist = lindgen( nentries[0] )+1 else $                            tmplist = listin    dbext, tmplist, itnum, itvals    typ = size(itvals,/TNAME)    if typ EQ 'STRING' then begin                itvals = strupcase( strtrim(itvals,2) )                vals   = strupcase( strtrim(values,2) )    endif else vals = values    for i=0L,nvals-1 do begin                    if typ NE 'STRING' then begin                  ;Fixed Feb 2007               good = where( itvals EQ vals[i], Nfound )                if Nfound GT 0 then list[i] = tmplist[ good[0] ]  ;Fixed May-92        endif else begin                 ;Can't use WHERE on string arrays                                         ;unless FULLSTRING is set               if keyword_set(fullstring) then begin                   good = where( itvals EQ vals[i], Nfound)                   if Nfound GT 0 then list[i] = tmplist[ good[0] ]                end else begin                      good = where(strpos( itvals, vals[i]) GE 0, Nfound)                       if Nfound GT 0 then begin                             list[i] = tmplist[good[0]]                             goto, DONE                       endif                                    endelse             endelse    DONE:           endforendelsereturn,listend

⌨️ 快捷键说明

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