/usr/share/gnudatalanguage/astrolib/rdfloat.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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | pro rdfloat,name,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17, $
v18,v19, SKIPLINE = skipline, NUMLINE = numline, DOUBLE=double, $
SILENT = silent, COLUMNS = columns
;+
; NAME:
; RDFLOAT
; PURPOSE:
; Quickly read a numeric ASCII data file into IDL floating/double vectors.
; EXPLANATION:
; Columns of data may be separated by tabs or spaces. This
; program is fast but is restricted to data files where all columns can
; be read as floating point (or all double precision).
;
; Use READCOL if greater flexibility is desired. Use READFMT to read a
; fixed-format ASCII file. Use FORPRINT to print columns of data.
;
; CALLING SEQUENCE:
; RDFLOAT, name, v1, [ v2, v3, v4, v5, ... v19]
; COLUMNS, /DOUBLE, SKIPLINE = , NUMLINE = ]
;
; INPUTS:
; NAME - Name of ASCII data file, scalar string.
;
; OPTIONAL INPUT KEYWORDS:
; COLUMNS - Numeric scalar or vector specifying which columns in the file
; to read. For example, if COLUMNS = [3,7,11] then the first
; output variable (v1) would contain column 3, the second would
; contain column 7 and the third would contain column 11. If
; the number of elements in the COLUMNS vector is less than the
; number of output parameters, then consecutive columns are
; implied. For example, if 3 output parameters are supplied
; (v1,v2,v3) and COLUMNS = 3, then columns 3,4, and 5 will be
; read.
; SKIPLINE - Integer scalar specifying number of lines to skip at the top
; of file before reading. Default is to start at the first line.
; NUMLINE - Integer scalar specifying number of lines in the file to read.
; Default is to read the entire file
; /DOUBLE - If this keyword is set, then all variables are read in as
; double precision.
; /SILENT - Set this keyword to suppress any informative messages
;
; OUTPUTS:
; V1,V2,V3,...V19 - IDL vectors to contain columns of data.
; Up to 19 columns may be read. All output vectors are of type
; float, unless the /DOUBLE keyword is set,
;
; EXAMPLES:
; Each row in a file 'position.dat' contains a star number and 6 columns
; of data giving an RA and Dec in sexagesimal format. Read into IDL
; variables.
;
; IDL> rdfloat,'position.dat',ID,hr,min,sec,deg,dmin,dsec
;
; All output vectors will be floating point. To only read the
; declination vectors (Deg,dmin,dsec)
;
; IDL> rdfloat,'position.dat',deg,dmin,dsec,col=4
;
; RESTRICTIONS:
; (1) All rows in the file must be formatted identically (except for
; those skipped by SKIPLINE). RDFLOAT reads the first line of
; the data (after SKIPLINE) to determine the number of columns of
; data.
; (2) Cannot be used to read strings
; PROCEDURES USED:
; None.
; REVISION HISTORY:
; Written W. Landsman September 1995
; Call NUMLINES() function February 1996
; Read up to 19 columns August 1997
; Allow to skip more than 32767 lines W. Landsman June 2001
; Added /SILENT keyword W. Landsman March 2002
; Added COLUMNS keyword, use STRSPLIT W. Landsman May 2002
; Use SKIP_LUN if V5.6 or later W. Landsman Nov 2002
; V5.6 version, use FILE_LINES() W. Landsman Dec 2002
; Use Catch rather than On_ERROR,2 W. Landsman Jan 2018
;-
compile_opt idl2
if N_params() lt 2 then begin
print,'Syntax - RDFLOAT, name, v1, [ v2, v3,...v19 '
print,' COLUMNS = ,/DOUBLE, SKIPLINE =, NUMLINE = ]'
return
endif
Catch, theError
if theError NE 0 then begin
Catch,/Cancel
void = cgErrorMsg(/quiet)
return
endif
; Get number of lines in file
nlines = FILE_LINES( name )
if nlines LE 0 then begin
message,'ERROR - File ' + name+' contains no data',/CON
return
endif
if ~keyword_set( SKIPLINE ) then skipline = 0
nlines = nlines - skipline
if keyword_set( NUMLINE) then nlines = numline < nlines
;Read first line, and determine number of columns of data
openr, lun, name, /GET_LUN
temp = ''
if skipline GT 0 then $
skip_lun, lun, skipline, /lines
readf,lun,temp
colval = strsplit(temp, count=ncol) ;Determine number of columns
;Create big output array and read entire file into the array
bigarr = keyword_set(DOUBLE) ? dblarr(ncol, nlines, /NOZERO): $
fltarr(ncol, nlines, /NOZERO)
close,lun
openr, lun, name
if skipline GT 0 then skip_lun, lun, skipline, /lines
readf, lun, bigarr
free_lun, lun
if ~keyword_set(SILENT) then $
message, strtrim(nlines,2) + ' lines of data read',/INF
Nvector = (N_params()-1) < ncol
if N_elements(columns) EQ 0 then c = indgen(nvector) else c = columns - 1
Nc = N_elements(c)
if Nc LT nvector then c = [c,indgen(nvector-nc) + c[nc-1] +1 ]
v1 = reform( bigarr[c[0],*])
if Nvector GT 1 then v2 = reform( bigarr[c[1],*]) else return
if Nvector GT 2 then v3 = reform( bigarr[c[2],*]) else return
if Nvector GT 3 then v4 = reform( bigarr[c[3],*]) else return
if Nvector GT 4 then v5 = reform( bigarr[c[4],*]) else return
if Nvector GT 5 then v6 = reform( bigarr[c[5],*]) else return
if Nvector GT 6 then v7 = reform( bigarr[c[6],*]) else return
if Nvector GT 7 then v8 = reform( bigarr[c[7],*]) else return
if Nvector GT 8 then v9 = reform( bigarr[c[8],*]) else return
if Nvector GT 9 then v10 = reform( bigarr[c[9],*]) else return
if Nvector GT 10 then v11 = reform( bigarr[c[10],*]) else return
if Nvector GT 11 then v12 = reform( bigarr[c[11],*]) else return
if Nvector GT 12 then v13 = reform( bigarr[c[12],*]) else return
if Nvector GT 13 then v14 = reform( bigarr[c[13],*]) else return
if Nvector GT 14 then v15 = reform( bigarr[c[14],*]) else return
if Nvector GT 15 then v16 = reform( bigarr[c[15],*]) else return
if Nvector GT 16 then v17 = reform( bigarr[c[16],*]) else return
if Nvector GT 17 then v18 = reform( bigarr[c[17],*]) else return
if Nvector GT 18 then v19 = reform( bigarr[c[18],*])
return
end
|