find_with_def.pro

来自「basic median filter simulation」· PRO 代码 · 共 154 行

PRO
154
字号
        FUNCTION FIND_WITH_DEF, FILENAME, PATHS, EXTENSIONS,    $                NOCURRENT=NOCURRENT, RESET=RESET;+; NAME: ;     FIND_WITH_DEF()    ; PURPOSE: ;     Searches for files with a default path and extension. ; EXPLANATION:;     Finds files using default paths and extensions,   Using this routine;     together with environment variables allows an OS-independent approach;     to finding files.; CALLING SEQUENCE: ;     Result = FIND_WITH_DEF( FILENAME, PATHS  [, EXTENSIONS ] );; INPUTS: ;     FILENAME   = Name of file to be searched for.  It may either be a;                    complete filename, or the path or extension could be left;                    off, in which case the routine will attempt to find the;                    file using the default paths and extensions.;;     PATHS      = One or more default paths to use in the search in case;                    FILENAME does not contain a path itself.  The individual;                    paths are separated by commas, although in UNIX, colons;                    can also be used.  In other words, PATHS has the same;                    format as !PATH, except that commas can be used as a;                    separator regardless of operating system.  The current;                    directory is always searched first, unless the keyword;                    NOCURRENT is set.;;                    A leading $ can be used in any path to signal that what;                    follows is an environmental variable, but the $ is not;                    necessary.  Environmental variables can themselves contain;                    multiple paths.;; OPTIONAL INPUTS: ;     EXTENSIONS = Scalar string giving one or more extensions to append to ;                  end of filename if the filename does not contain one (e.g. ;                   ".dat").  The period is optional.  Multiple extensions can ;                   be separated by commas or colons.; OUTPUTS: ;     The result of the function is the name of the file if successful, or;     the null string if unsuccessful.; OPTIONAL INPUT KEYWORDS: ;     NOCURRENT = If set, then the current directory is not searched.;;      RESET      = The FIND_WITH_DEF routine supports paths which are;                    preceeded with the plus sign to signal that all;                    subdirectories should also be searched.  Often this is;                    used with logical names.  It can be rather slow to search;                    through these subdirectories.  The /RESET keyword can be;                    used to redefine an environment variable so that;                    subsequent calls don't need to look for the;                    subdirectories.;;                    To use /RESET, the PATHS parameter must contain the name;                    of a *single* environment variable.  For example;;                     setenv,'FITS_DATA=+/datadisk/fits';                     file = find_with_def('test.fits','FITS_DATA',/reset);; EXAMPLE:;;       FILENAME = '';       READ, 'File to open: ', FILENAME;       FILE = FIND_WITH_DEF( FILENAME, 'SERTS_DATA', '.fix' );       IF FILE NE '' THEN ...;;; PROCEDURE CALLS: ;       BREAK_PATH(), FIND_ALL_DIR(), STR_SEP(); REVISION HISTORY: ;       Version 1, William Thompson, GSFC, 3 May 1993.;               Removed trailing / and : characters.;               Fixed bugs;               Allow for commas within values of logical names.;               Added keyword NOCURRENT.;               Changed to call BREAK_PATH;       Version 2, William Thompson, GSFC, 3 November 1994;               Made EXTENSIONS optional.;       Version 3, William Thompson, GSFC, 30 April 1996;               Call FIND_ALL_DIR to resolve any plus signs.;       Version 4, S.V. Haugan, UiO, 5 June 1996;               Using OPENR,..,ERROR=ERROR to avoid an IDL 3.6;               internal nesting error.;       Version 5, R.A. Schwartz, GSFC, 11 July 1996;               Use SPEC_DIR to interpret PATH under VMS;       Version 6, William Thompson, GSFC, 5 August 1996;               Took out call to SPEC_DIR (i.e., reverted to version 4).  The;               use of SPEC_DIR was required to support logical names defined;               via SETLOG,/CONFINE.  However, it conflicted with the ability;               to use logical names with multiple values.  Removing the;               /CONFINE made it unnecessary to call SPEC_DIR in this routine.;       Version 7, William Thompson, GSFC, 6 August 1996;               Added keyword RESET;       Converted to IDL V5.0   W. Landsman   October 1997;       Use STRTRIM instead of TRIM,   W. Landsman   November 1998;       Use STRSPLIT instead of STR_SEP  W. Landsman  July 2002;-;        ON_ERROR, 2;;  Check the number of parameters:;        IF N_PARAMS() LT 2 THEN MESSAGE, 'Syntax:  Result = ' + $                'FIND_WITH_DEF(FILENAME, PATHS [, EXTENSIONS])';;  If there are any plus signs, then expand them.;        PATH = FIND_ALL_DIR(PATHS, /PLUS_REQUIRED, /PATH, RESET=RESET);;  Reformat PATHS into an array.  The first element is the null string.;        PATH = BREAK_PATH(PATH);;  If NOCURRENT was set, then remove the first (blank) entry from the PATH;  array.;        IF KEYWORD_SET(NOCURRENT) THEN PATH = PATH[1:*];;  Reformat EXTENSIONS into an array.  The first element is the null string.;       EXT = ''        IF N_PARAMS() EQ 3 THEN $            EXT = ['',STRSPLIT(EXTENSIONS,',:',/EXTRACT)] ;;  Make sure that the extensions begin with a period.;        FOR I = 0,N_ELEMENTS(EXT)-1 DO IF EXT[I] NE '' THEN     $                IF STRMID(EXT[I],0,1) NE '.' THEN EXT[I] = '.' + EXT[I];;  Set up variables used by the loops below.;        I_PATH = -1        GET_LUN, UNIT	FNAME = STRTRIM(FILENAME,2) + EXT;;  Step through each of the paths.;        FOR I_PATH = 0, N_ELEMENTS(PATH)- 1 DO BEGIN ;;  If the file is found then terminate the loop and clean up.;        FILE = FILE_SEARCH(PATH[I_PATH] + FNAME, COUNT = COUNT)        IF COUNT GT 0 THEN BREAK        ENDFOR;;  Otherwise, we jump directly to here when we find a file.;DONE:        FREE_LUN, UNIT	!ERR = COUNT        RETURN, FILE[0]        END

⌨️ 快捷键说明

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