pro write_ascii_cmdline, data, filename, header=header, nrecs=nrecs
;
; NAME:
; WRITE_ASCII_CMDLINE
;
; PURPOSE:
; Write an IDL data to an ASCII file.
;
; CATEGORY:
; Input/Output.
;
; CALLING SEQUENCE:
; WRITE_ASCII_CMDLINE, data, filename, field_types=field_types, header=header
;
;
; INPUTS:
; data = A structure containing the fields or columns. Ex:
; {field01:[col1], field02:[col2], ...} where colx is a 1-D or
; nrow array. All colx's must be of the same size or nrows.
; Data could also be an ncol x nrow array of data where all data
; is of the same type.
; filename = Name of file to read.
;
; INPUT KEYWORD PARAMETERS:
;
; header = An array of strings containing header information for the file
;
; OUTPUT KEYWORD PARAMETERS:
; nrecs = The number of data records writen. This count does not include header
; data.
;
; OUTPUTS:
; none
;
; EXAMPLES:
; data = dingen(3,10) (ncol,nrow)
; filename = 'test.txt'
; write_ascii_cmdline, data, filename
;
; data = {t:[], x:[], y:[], z:[]} where t=array of string times, x,y,z= an array of doubles
; header = ['', '', '',...]
; field_types = ['string', 'double', 'double', 'double']
; write_ascii_cmdline, data, filename, field_types=field_types, header=header, count=count
;
; NOTES:
; May possibly want to add a keyword to specify formats. Something similar to the
; field_types keyword in read_ascii_cmdline.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; verify filename
if (filename ne '') then begin
openw,unit,filename,/get_lun
endif else begin
print, 'You must enter a filename'
print, 'Usage: write_ascii_cmdline, data, filename, field_types=field_types, header=header, count=count'
return
endelse
; check the type of input data and determine the array sizes
if is_struct(data) then begin
ncols = n_elements(tag_names(data))
nrows = n_elements(data.(0))
endif else begin
if n_elements(size(data, /dim)) eq 1 then begin
ncols=1
nrows=size(data, /dim)
endif else begin
ncols = (size(data, /dim))[0]
nrows = (size(data, /dim))[1]
endelse
endelse
; write header information first
if is_string(header) then for i=0,n_elements(header)-1 do printf, unit, header[i]
; now write the data
strings = make_array(ncols, /string)
for i=0,nrows-1 do begin
if is_struct(data) then begin
for j=0, ncols-1 do strings[j]=string(data.(j)[i])
printf, unit, strings
endif else begin
printf, unit, data[*,i]
endelse
endfor
free_lun,unit
nrecs=i
if nrecs ne nrows then print, 'Error - Did not finish writing all rows to the file.'
end