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