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

📄 fxpar.pro

📁 basic median filter simulation
💻 PRO
📖 第 1 页 / 共 2 页
字号:
            RESTART:            START   = -1L            KEYWORD = STRMID( HDR, 0, 8)        ENDELSE        IF VECTOR THEN BEGIN            NFOUND = WHERE(STRPOS(KEYWORD,NAM) GE 0, MATCHES)            IF ( MATCHES GT 0 ) THEN BEGIN                NUMST= STRMID(HDR[NFOUND], NAME_LENGTH, NUM_LENGTH)                NUMBER = INTARR(MATCHES)-1                FOR I = 0, MATCHES-1 DO         $                    IF VALID_NUM( NUMST[I], NUM) THEN NUMBER[I] = NUM                IGOOD = WHERE(NUMBER GE 0, MATCHES)                IF MATCHES GT 0 THEN BEGIN                    NFOUND = NFOUND[IGOOD]                    NUMBER = NUMBER[IGOOD]                ENDIF            ENDIF;;  Otherwise, find all the instances of the requested keyword.  If more than;  one is found, and NAME is not one of the special cases, then print an error;  message.;        ENDIF ELSE BEGIN            NFOUND = WHERE(KEYWORD EQ NAM, MATCHES)            IF MATCHES EQ 0 AND START GE 0 THEN GOTO, RESTART            IF START GE 0 THEN NFOUND = NFOUND + MN            IF (MATCHES GT 1) AND (NAM NE 'HISTORY ') AND               $                (NAM NE 'COMMENT ') AND (NAM NE '') THEN        $                MESSAGE,/INFORMATIONAL, 'WARNING- Keyword ' +   $                NAM + 'located more than once in ' + ABORT            IF (MATCHES GT 0) THEN START = NFOUND[MATCHES-1]        ENDELSE;;  Extract the parameter field from the specified header lines.  If one of the;  special cases, then done.;        IF MATCHES GT 0 THEN BEGIN            LINE = HDR[NFOUND]            SVALUE = STRTRIM( STRMID(LINE,9,71),2)            IF (NAM EQ 'HISTORY ') OR (NAM EQ 'COMMENT ') OR    $                    (NAM EQ '        ') THEN BEGIN                VALUE = STRTRIM( STRMID(LINE,8,72),2)                COMMENTS = STRARR(N_ELEMENTS(VALUE));;  Otherwise, test to see if the parameter contains a string, signalled by;  beginning with a single quote character (') (apostrophe).;            END ELSE FOR I = 0,MATCHES-1 DO BEGIN                IF ( STRMID(SVALUE[I],0,1) EQ "'" ) THEN BEGIN                    TEST = STRMID( SVALUE[I],1,STRLEN( SVALUE[I] )-1)                    NEXT_CHAR = 0                    OFF = 0                    VALUE = '';;  Find the next apostrophe.;NEXT_APOST:                    ENDAP = STRPOS(TEST, "'", NEXT_CHAR)                    IF ENDAP LT 0 THEN MESSAGE,         $                        'WARNING: Value of '+NAME+' invalid in '+ABORT+ " (no trailing ')", /info                    VALUE = VALUE + STRMID( TEST, NEXT_CHAR, ENDAP-NEXT_CHAR );;  Test to see if the next character is also an apostrophe.  If so, then the;  string isn't completed yet.  Apostrophes in the text string are signalled as;  two apostrophes in a row.;                    IF STRMID( TEST, ENDAP+1, 1) EQ "'" THEN BEGIN                            VALUE = VALUE + "'"                        NEXT_CHAR = ENDAP+2                              GOTO, NEXT_APOST                    ENDIF;;  Extract the comment, if any.;                    SLASH = STRPOS(TEST, "/", ENDAP)                    IF SLASH LT 0 THEN COMMENT = '' ELSE        $                        COMMENT = STRMID(TEST, SLASH+1, STRLEN(TEST)-SLASH-1);; CM 19 Sep 1997; This is a string that could be continued on the next line.  Check this; possibility with the following four criteria: *1) Ends with '&'; (2) Next line is CONTINUE  (3) LONGSTRN keyword is present (recursive call to;  FXPAR) 4. /NOCONTINE is not set    IF NOT KEYWORD_SET(NOCONTINUE) THEN BEGIN                    OFF = OFF + 1                    VAL = STRTRIM(VALUE,2)                    IF (STRLEN(VAL) GT 0) AND $                      (STRMID(VAL, STRLEN(VAL)-1, 1) EQ '&') AND $                      (STRMID(HDR[NFOUND[I]+OFF],0,8) EQ 'CONTINUE') THEN BEGIN                       IF (SIZE(FXPAR(HDR, 'LONGSTRN',/NOCONTINUE)))[1] EQ 7 THEN BEGIN                                          VALUE = STRMID(VAL, 0, STRLEN(VAL)-1)                      TEST = HDR[NFOUND[I]+OFF]                      TEST = STRMID(TEST, 8, STRLEN(TEST)-8)                      TEST = STRTRIM(TEST, 2)                      IF STRMID(TEST, 0, 1) NE "'" THEN MESSAGE, $                        'ERROR: Invalidly CONTINUEd string in '+ABORT                      NEXT_CHAR = 1                      GOTO, NEXT_APOST                    ENDIF                   ENDIF    ENDIF;;  If not a string, then separate the parameter field from the comment field.;                ENDIF ELSE BEGIN                    TEST = SVALUE[I]                    SLASH = STRPOS(TEST, "/")                    IF SLASH GT 0 THEN BEGIN                        COMMENT = STRMID(TEST, SLASH+1, STRLEN(TEST)-SLASH-1)                        TEST = STRMID(TEST, 0, SLASH)                    END ELSE COMMENT = '';;  Find the first word in TEST.  Is it a logical value ('T' or 'F')?;                    TEST2 = TEST                    VALUE = GETTOK(TEST2,' ')                    TEST2 = STRTRIM(TEST2,2)                    IF ( VALUE EQ 'T' ) THEN BEGIN                        VALUE = 1                    END ELSE IF ( VALUE EQ 'F' ) THEN BEGIN                        VALUE = 0                    END ELSE BEGIN;;  Test to see if a complex number.  It's a complex number if the value and the;  next word, if any, both are valid numbers.;                        IF STRLEN(TEST2) EQ 0 THEN GOTO, NOT_COMPLEX                        VALUE2 = GETTOK(TEST2,' ')                        IF VALID_NUM(VALUE,VAL1) AND VALID_NUM(VALUE2,VAL2) $                                THEN BEGIN                            VALUE = COMPLEX(VAL1,VAL2)                            GOTO, GOT_VALUE                        ENDIF;;  Not a complex number.  Decide if it is a floating point, double precision,;  or integer number.  If an error occurs, then a string value is returned.;  If the integer is not within the range of a valid long value, then it will ;  be converted to a double.  ;NOT_COMPLEX:                        ON_IOERROR, GOT_VALUE                        VALUE = TEST                        IF NOT VALID_NUM(VALUE) THEN GOTO, GOT_VALUE                        IF (STRPOS(VALUE,'.') GE 0) OR (STRPOS(VALUE,'E') $                                GE 0) OR (STRPOS(VALUE,'D') GE 0) THEN BEGIN                            IF ( STRPOS(VALUE,'D') GT 0 ) OR $                                    ( STRLEN(VALUE) GE 8 ) THEN BEGIN                                VALUE = DOUBLE(VALUE)                                END ELSE VALUE = FLOAT(VALUE)                        ENDIF ELSE BEGIN                            LMAX = 2.0D^31 - 1.0D                            LMIN = -2.0D31                            VALUE = DOUBLE(VALUE)                            if (VALUE GE LMIN) and (VALUE LE LMAX) THEN $                                VALUE = LONG(VALUE)                        ENDELSE                            ;GOT_VALUE:                        ON_IOERROR, NULL                    ENDELSE                ENDELSE         ; if string;;  Add to vector if required.;                IF VECTOR THEN BEGIN                    MAXNUM = MAX(NUMBER)                    IF ( I EQ 0 ) THEN BEGIN                        IF N_ELEMENTS(DATATYPE) EQ 0 THEN BEGIN                            ;; Data type determined from keyword                            SZ_VALUE = SIZE(VALUE)                        ENDIF ELSE BEGIN                            ;; Data type requested by user                            SZ_VALUE = SIZE(DATATYPE[0])                        ENDELSE                        RESULT = MAKE_ARRAY( MAXNUM, TYPE=SZ_VALUE[1])                        COMMENTS = STRARR(MAXNUM)                    ENDIF                     RESULT[   NUMBER[I]-1 ] =  VALUE                    COMMENTS[ NUMBER[I]-1 ] =  COMMENT                ENDIF ELSE BEGIN                    COMMENTS = COMMENT                ENDELSE            ENDFOR;;  Set the value of !ERR for the number of matches for vectors, or simply 0;  otherwise.;            IF VECTOR THEN BEGIN                !ERR = MATCHES                RETURN, RESULT            ENDIF ELSE !ERR = 0;;  Error point for keyword not found.;        ENDIF ELSE BEGIN            IF ABORT_RETURN THEN MESSAGE,'Keyword '+NAM+' not found in '+ABORT            !ERR = -1        ENDELSE;        RETURN, VALUE        END

⌨️ 快捷键说明

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