Viewing contents of file '../idllib/contrib/groupk/get_fmt.pro'
;+
; NAME:
; GET_FMT
;
; PURPOSE:
; This function extracts the name of the format of an IDL data file.
;
; CATEGORY:
; I/O.
;
; CALLING SEQUENCE:
;
; Result = GET_FMT( File )
;
; INPUTS:
; File: Name of the IDL data file. If none is provided, the
; USER will be prompted for it via PICKFILE().
;
; OUTPUTS:
; The format name is returned. If the format of the IDL data file
; is not among the currently recognized data formats, then a
; null string, '' is returned. The list of currently recognized
; data format is a follows:
;
; 'ASPECTS'
; 'STANDARD'
; 'NOBARY'
;
; EXAMPLE:
; ;Let's say we have the IDL data file, 1755-33.IDL and we would
; ;like to determine the format of this file:
;
; fmt = GET_FMT( !DATA_PATH+'1755-33.IDL' )
;
; ;The value of fmt will be: 'ASPECTS'
;
; MODIFICATION HISTORY:
; Written by: Han Wen, December 1994.
; 06-AUG-1996 Make File a required input parameter.
;-
function GET_FMT, File
NP = N_PARAMS()
if NP eq 0 then message, $
'Must be called with 1 parameter: File.'
hdr_str = '(#'
fmt_str = 'FMT'
src_str = 'SOURCE'
fmt_type = ''
known_fmts= [ 'ASPECTS', $ ;Names of data formats
'STANDARD',$ ;currently recognized
'NOBARY' ]
openr, lun, file, /GET_LUN
hdr = ''
readf, lun, hdr
i_hdr= strpos( hdr,hdr_str )
if i_hdr eq -1 then goto, CHK_FMT
; Loop through each line of the header
repeat begin
; Look for the third number in the (#SOURCE header line;
; this would be one of the barycentric time corrections.
i_src = strpos( hdr, src_str, strlen( hdr_str ) )
if (i_src ne -1) then begin
nper = 0
per = strpos( hdr, '.' )
while (per ne -1) do begin
nper = nper + 1
per = strpos( hdr, '.', per+1 )
endwhile
if nper gt 2 then fmt_type = 'STANDARD' $
else fmt_type = 'NOBARY'
endif
; Look for the (#FMT header line
i_fmt = strpos( hdr, fmt_str, strlen( hdr_str ) )
if (i_fmt ne -1) then begin
i_off = i_fmt + strlen( fmt_str )
fmt_type = strmid( hdr, i_off, strlen( hdr ) - i_off )
fmt_type = strtrim( fmt_type,2 )
endif
readf, lun, hdr
endrep until (strpos(hdr,hdr_str) eq -1 )
CHK_FMT: close, lun
free_lun, lun
; Make sure the name of the format matches the data formats
; currently recognized.
match = where( fmt_type eq known_fmts, nmatch )
if nmatch eq 0 then begin
message,'Format of data file not recognized.',/INF
return, ''
endif
return, fmt_type
end