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

📄 sxhread.pro

📁 basic median filter simulation
💻 PRO
字号:
pro sxhread, name, header;+; NAME:;       SXHREAD; PURPOSE:;       Procedure to read a STSDAS header from disk.; EXPLANATION:;       This version of SXHREAD can read two types of disk files;       (1)  Unix stream files with a CR after every 80 bytes;       (2)  Variable length record files ;       (3)  Fixed length (80 byte) record files;; CALLING SEQUENCE:;       sxhread, name, header;; INPUT:;       name - file name, scalar string.  An extension of .hhh is appended;               if not already supplied.   (Note STSDAS headers are required;               to have a 3 letter extension ending in 'h'.)   gzip extensions;               .gz will be recognized as compressed.; OUTPUT:;       header - STSDAS header, string array; NOTES:;       SXHREAD  does not do any checking to see if the file is a valid;       STSDAS header.    It simply reads the file into a string array with;       80 byte elements;; HISTORY:;       Version 1  D. Lindler  July, 1987;       Version 2  M. Greason, August 1990;       Use READU for certain ST VAX GEIS files   W. Landsman January, 1992;       Read variable length Unix files  E. Deutsch/W. Landsman November, 1994;       Converted to IDL V5.0   W. Landsman   September 1997;       Updated by E. Artigau to handle gzipped fits  August 2004;       Remove VMS support, W. Lnadsman September 2006;-;-------------------------------------------------------------------- compile_opt idl2 On_error,2                              ;Return to caller if N_params() LT 2 then begin     print,'Syntax - SXHREAD, name, header'     return endif; Add extension name if needed hname = strtrim(name,2) if strpos(hname,'.',strpos(hname,']') ) EQ -1 then hname = hname + '.hhh' compress =  (strmid(name,strlen(name)-2,2) eq 'gz')  openr, unit, hname, /GET_LUN, ERROR = err,COMPRESS = compress if err LT 0 then goto, BADFILE len = 80  & ai = 99                    ;Usual header length is 80 bytes    ;but Unix files may have an                                        ;embedded carriage returns to make   atmp = assoc(unit,bytarr(85))           ;header length 81 bytes   a=atmp[0] & ai=0   while (a[ai] ne 10) and (a[ai] ne 13) and (ai lt 84) do ai=ai+1   if (ai EQ 80) then len=81   Point_lun, unit, 0            ;Back to the beginning of the file; Get the number of lines in the header status = fstat(unit) nlines = status.size/len                      ;Number of lines in file if (ai lt 80) then goto,VAR_LENGTH; Read header header =  bytarr(len,nlines ,/NOZERO) On_ioerror, VAR_LENGTH        ;READU cannot be used on variable length records readu, unit, header header = string(header) On_ioerror,NULL free_lun,unit             ;Close and free file unit; Trim to the END line, and delete carriage returns if necessary endline = where( strmid(header,0,8) EQ 'END     ',nfound) if nfound gt 0 then header = header[0:endline[0]] else $     message,'WARNING: No END statement found in header',/inform if len EQ 81 then header = strmid(header,0,80) returnVAR_LENGTH:                 ;Now try to read as variable length records Point_lun, unit, 0          ;Back to the beginning of file h = ''  & header = strarr( nlines) i = 0 On_ioerror,NOEND            ;Can't use EOF function on certain GEIS files while ( strtrim( strmid(h,0,8), 2) NE 'END') do begin    readf, unit, h    if (strlen(h) LT 80) then h=h+string(replicate(32b,80-strlen(h)))    header[i] = h                  ;Swapped with line above 95-Aug    i = i + 1    if i EQ nlines then begin            header = [header,strarr(100)]            nlines = nlines + 100     endif endwhile header = header[0:i-1] free_lun,unit returnNOEND:   message,'WARNING - No END statement found in header', /INFORM   free_lun,unit   returnBADFILE:   message,'Error opening file ' + ' ' + hname   returnend

⌨️ 快捷键说明

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