Add a cell to a CSV file.
Todo
Need to check the istat
values for errors.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(csv_file), | intent(inout) | :: | me | |||
class(*), | intent(in) | :: | val |
the value to add |
||
character(len=*), | intent(in), | optional | :: | int_fmt |
if |
|
character(len=*), | intent(in), | optional | :: | real_fmt |
if |
|
logical, | intent(in), | optional | :: | trim_str |
if |
subroutine add_cell(me,val,int_fmt,real_fmt,trim_str) implicit none class(csv_file),intent(inout) :: me class(*),intent(in) :: val !! the value to add character(len=*),intent(in),optional :: int_fmt !! if `val` is an integer, use !! this format string. character(len=*),intent(in),optional :: real_fmt !! if `val` is a real, use !! this format string. logical,intent(in),optional :: trim_str !! if `val` is a string, then trim it. integer :: istat !! write `iostat` flag character(len=:),allocatable :: ifmt !! actual format string to use for integers character(len=:),allocatable :: rfmt !! actual format string to use for reals logical :: trimstr !! if the strings are to be trimmed character(len=max_real_str_len) :: real_val !! for writing a real value character(len=max_integer_str_len) :: int_val !! for writing an integer value ! make sure the row isn't already finished if (me%icol<me%n_cols) then me%icol = me%icol + 1 if (me%enclose_all_in_quotes) then write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%quote end if select type (val) type is (integer(ip)) if (present(int_fmt)) then ifmt = trim(adjustl(int_fmt)) else ifmt = default_int_fmt end if write(int_val,fmt=ifmt,iostat=istat) val write(me%iunit,fmt='(A)',advance='NO',iostat=istat) trim(adjustl(int_val)) type is (real(sp)) if (present(real_fmt)) then rfmt = trim(adjustl(real_fmt)) else rfmt = default_real_fmt end if write(real_val,fmt=rfmt,iostat=istat) val write(me%iunit,fmt='(A)',advance='NO',iostat=istat) trim(adjustl(real_val)) type is (real(wp)) if (present(real_fmt)) then rfmt = trim(adjustl(real_fmt)) else rfmt = default_real_fmt end if write(real_val,fmt=rfmt,iostat=istat) val write(me%iunit,fmt='(A)',advance='NO',iostat=istat) trim(adjustl(real_val)) type is (logical) if (val) then write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%logical_true_string else write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%logical_false_string end if type is (character(len=*)) if (me%enclose_strings_in_quotes .and. .not. me%enclose_all_in_quotes) & write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%quote if (present(trim_str)) then trimstr = trim_str else trimstr = .false. end if if (trimstr) then write(me%iunit,fmt='(A)',advance='NO',iostat=istat) trim(val) else write(me%iunit,fmt='(A)',advance='NO',iostat=istat) val end if if (me%enclose_strings_in_quotes .and. .not. me%enclose_all_in_quotes) & write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%quote type is (csv_string) if (me%enclose_strings_in_quotes .and. .not. me%enclose_all_in_quotes) & write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%quote if (present(trim_str)) then trimstr = trim_str else trimstr = .false. end if if (trimstr) then write(me%iunit,fmt='(A)',advance='NO',iostat=istat) trim(val%str) else write(me%iunit,fmt='(A)',advance='NO',iostat=istat) val%str end if if (me%enclose_strings_in_quotes .and. .not. me%enclose_all_in_quotes) & write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%quote class default if (me%verbose) write(error_unit,'(A)') & 'Error: cannot write unknown variable type to CSV file.' end select if (me%enclose_all_in_quotes) then write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%quote end if if (me%icol<me%n_cols) write(me%iunit,fmt='(A)',advance='NO',iostat=istat) me%delimiter else if (me%verbose) write(error_unit,'(A)') & 'Error: cannot write more cells to the current row.' end if end subroutine add_cell