Export data frame to CSV file
Writes the data frame to a CSV file with optional headers. Handles all data types: real, integer, logical, character, and complex.
@param[in] df The data frame to export @param[in] filename Path to the output CSV file
Note
Character values are quoted in the output
Note
Complex values are written as (real,imag)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(data_frame), | intent(in) | :: | df | |||
character(len=*), | intent(in) | :: | filename |
subroutine df_write_csv(df, filename) type(data_frame), intent(in) :: df character(len=*), intent(in) :: filename integer :: unit, i, j, dtype integer :: num_cols, num_rows type(column) :: data_col logical :: has_headers open (newunit=unit, file=filename, status='replace', action='write') num_cols = df % ncols() num_rows = df % nrows() has_headers = df % get_with_headers() ! Write headers if present if (has_headers) then do i = 1, num_cols if (i > 1) write (unit, '(a)', advance='no') ',' write (unit, '(a)', advance='no') trim(df % header(i)) end do write (unit, '(a)') '' end if ! Write data do j = 1, num_rows do i = 1, num_cols if (i > 1) write (unit, '(a)', advance='no') ',' data_col = df % get_data_col(i) dtype = data_col % get_type() select case (dtype) case (REAL_NUM) write (unit, '(g0)', advance='no') data_col % getr(j) case (INTEGER_NUM) write (unit, '(i0)', advance='no') data_col % geti(j) case (LOGICAL_NUM) write (unit, '(l1)', advance='no') data_col % getl(j) case (CHARACTER_NUM) write (unit, '(a)', advance='no') '"'//trim(data_col % getch(j))//'"' case (COMPLEX_NUM) write (unit, '("(",g0,",",g0,")")', advance='no') data_col % getc(j) end select end do write (unit, '(a)') '' end do close (unit) end subroutine df_write_csv