/usr/share/gnudatalanguage/astrolib/strnumber.pro is in gdl-astrolib 2018.02.16+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | function strnumber, st, val, hex = hexflg, NaN = nan, L64 = l64
;+
; NAME:
; STRNUMBER()
; PURPOSE:
; Function to determine if a string is a valid numeric value.
;
; EXPLANATION:
; A string is considered a valid numeric value if IDL can convert it
; to a numeric variable without error.
; CALLING SEQUENCE:
; result = strnumber( st, [val, /HEX] )
;
; INPUTS:
; st - any IDL scalar string
;
; OUTPUTS:
; 1 is returned as the function value if the string st has a
; valid numeric value, otherwise, 0 is returned.
;
; OPTIONAL OUTPUT:
; val - (optional) value of the string. double precision unless /L64 is set
;
; OPTIONAL INPUT KEYWORD:
; /HEX - If present and nonzero, the string is treated as a hexadecimal
; longword integer.
; /L64 - If present and nonzero, the val output variable is returned
; as a 64 bit integer. This to ensure that precision is not
; lost when returning a large 64 bit integer as double precision.
; This keyword has no effect on the function result.
; /NAN - if set, then the value of an empty string is returned as NaN,
; by default the returned value is 0.0d. In either case,
; an empty string is considered a valid numeric value.
;
; EXAMPLES:
; IDL> res = strnumber('0.2d', val)
; returns res=1 (a valid number), and val = 0.2000d
;
; NOTES:
; (1) STRNUMBER was modified in August 2006 so that an empty string is
; considered a valid number. Earlier versions of strnumber.pro did not
; do this because in very early (pre-V4.0) versions of IDL
; this could corrupt the IDL session.
;
; (2) STRNUMBER will return a string such as '23.45uyrg' as a valid
; number (=23.45) since this is how IDL performs the type conversion. If
; you want a stricter definition of valid number then use the VALID_NUM()
; function.
; HISTORY:
; version 1 By D. Lindler Aug. 1987
; test for empty string, W. Landsman February, 1993
; Hex keyword added. MRG, RITSS, 15 March 2000.
; An empty string is a valid number W. Landsman August 2006
; Added /NAN keyword W. Landsman August 2006
; Added /L64 keyword W. Landsman Feb 2010
;-
compile_opt idl2
if N_params() EQ 0 then begin
print,'Syntax - result = strnumber( st, [val, /HEX, /NAN] )'
return, 0
endif
newstr = strtrim( st )
if keyword_set(NAN) then if newstr EQ '' then begin
val = !VALUES.D_NAN
return, 1
endif
On_IOerror, L1 ;Go to L1 if conversion error occurs
If ~keyword_set(hexflg) Then Begin
val = double( newstr )
EndIf Else Begin
val = 0L
reads, newstr, val, Format="(Z)"
EndElse
if keyword_set(L64) then val = long64( newstr)
return, 1 ;No conversion error
L1: return, 0 ;Conversion error occured
end
|