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

📄 get_coords.pro

📁 basic median filter simulation
💻 PRO
字号:
pro GET_COORDS, Coords, PromptString, NumVals, InString=InString, Quiet=Quiet;*******************************************************************************;+; NAME:;       GET_COORDS;; PURPOSE:;       Converts a string with angular coordinates  to floating point values.  ; EXPLANATION:;       Although called by ASTRO.PRO, this is a general purpose routine.;       The user may input as floating point or sexigesimal.  If user inputs ;       calling procedure's job to convert hours to degrees if needed.;       Since the input string is parsed character-by-character, ANY character;       that is not a digit, minus sign or decimal point may be used as a ;       delimiter, i.e. acceptable examples of user input are:;;       1:03:55 -10:15:31;       1 3 55.0 -10 15 31;       1*3 55              -10abcd15efghij31;       1.065278  hello   -10.25861;; CALLING SEQUENCE:;       GET_COORDS, Coords, [ PromptString, NumVals, INSTRING =, /QUIET ];; OPTIONAL INPUT:;       PromptString - A string to inform the user what data are to be entered;; OPTIONAL KEYWORD INPUT:;       InString - a keyword that, if set, is assumed to already contain the;               input data string to be parsed.  If this keyword is set, then;               the user is not prompted for any input.;       /Quiet - if set the program won't printout any error messages, but bad;               input is still flagged by Coords=[-999,-999].;; OUTPUT:;       Coords - a 2 element floating array containing the coordinates.  The;               vector [-999,-999] is returned if there has been an error.;; OPTIONAL OUTPUT:;       NumVals - the number of separate values entered by the user:  2 if the;               user entered the coordinates as floating point numbers, 6 if ;               the user entered the coordinates as sexigesimal numbers.  Some;               calling procedures might find this information useful (e.g., to;               to print some output in the same format as the user's input).;; REVISION HISTORY:;       Written by Joel Parker, 5 MAR 90;       Included InString and Quiet keywords.  Cleaned up some of the code and;       comments.  JWmP,  16 Jun 94;;*******************************************************************************;       Converted to IDL V5.0   W. Landsman   September 1997;-On_error,2if (N_params() eq 0) then begin      print,'Syntax - ' + $         'GET_COORDS, Coords, [PromptString, NumVals, INSTRING=, /QUIET]'      returnendif ;;   Define some parameters and variables.;if (N_Params() lt 2) then PromptString = " Please input the coordinates"Bell     = string(7B)Minus    = 45      ; ascii of "-"Decimal  = 46      ; ascii of "."Zero     = 48      ; ascii of "0"Nine     = 57      ; ascii of "9"ValArr   = dblarr(6)SignArr  = intarr(6) + 1NumVals  = 0StartPos = -1;;    If the InString keyword is not set, then prompt the user for input.  If ; nothing is entered, return [-999,-999] as a warning flag to the calling ; procedure.;if keyword_set(InString) then begin   Coords = InStringendif else begin   Coords = ""   print,form =  "$(1X,A,$)", + PromptString + " {RETURN to exit} "   read, CoordsendelseCoords = strtrim(Coords) + " "  ; The final space is needed for parsing purposesif (Coords eq " ") then begin   Coords = [-999,-999]   returnendif;;   All's well.  Get the byte values for the characters in the input string.;BCoords = byte(Coords);;   Begin the loop that parses the input string.;   Start by loading the byte value of the next character into the BC variable.; Check to see if the character is a minus sign (if so, set the flag in the ; SignArr array to -1).  Check to see if the character is a numeral between 0-9 ; or a decimal (if so, then the NumFlag is set to 1).;for N = 0,(strlen(Coords)-1) do begin   BC = BCoords[N]   if (BC eq Minus) then SignArr[NumVals] = -1   NumFlag = ((BC ge Zero) and (BC le Nine)) or (BC eq Decimal);;   If the number flag is set, but StartPos = -1, then we are starting a new ; value.  Load the character's position in StartPos.;   if (NumFlag and (StartPos eq -1)) then StartPos = N;;     If the number flag is NOT set, but StartPos > -1, then we have just ; finished reading a number.  Read the number from StartPos to the current ; position, and reset StartPos to -1.;   Put the resulting number in the ValArr.;   if (not(NumFlag) and (StartPos gt -1)) then begin      if (NumVals lt 6) then begin         ValArr[NumVals] = float(strmid(Coords, StartPos, (N - StartPos)))      endif      StartPos = -1      NumVals  = NumVals + 1   endifendfor;;   Coords should be a 2 or 6 element vector {depending on the type of input}.; It is converted to a 2 element vector such that Coords = [RA/Long, Dec/Lat].;case NumVals of   2 : Coords = (ValArr * SignArr)[0:1]   6 : begin      Temp = where(SignArr[0:2] eq -1)      if (Temp[0] eq -1) then XSign = 1 else XSign = -1      Temp = where(SignArr[3:5] eq -1)      if (Temp[0] eq -1) then YSign = 1 else YSign = -1      X = (ValArr[0] + (ValArr[1] / 60.) + (ValArr[2] / 3600.)) * XSign      Y = (ValArr[3] + (ValArr[4] / 60.) + (ValArr[5] / 3600.)) * YSign      Coords = [X,Y]   end   else : begin      Coords = [-999,-999]      if not(keyword_set(Quiet)) then begin         print, Bell         print, "ERROR - Invalid Input!"         print, "Coordinates must be input as 2 or 6 values."         print, "For example:  1.568 -10.343   or  1 34 4.8  10 20 34.8"      endif   endelseendcasereturnend   ;   procedure GET_COORDS   by   Joel Parker   16 Jun 94

⌨️ 快捷键说明

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