subroutine read_logical_column(file_id, column, array, default, index, skip)
! Read column of logical values to fill a 1d array
!
! Optional arguments:
! -------------------
! column : Name of column to read
! default : Value to fill array if column not found, raises error otherwise
! index : Read column by position/index, since the header is not read
! the column is read from the current line onwards
! skip : Skip rows after header (column parsed) or current position (index)
integer, intent(in) :: file_id
character(len=*), intent(in), optional :: column
logical, dimension(:), intent(out) :: array
logical, intent(in), optional :: default
integer, intent(in), optional :: index, skip
integer i, column_ix
character(len=read_line_buffer_size) str_value
integer temp, ios
if (present(column)) then
! Find column index
column_ix = header_column_index(column, file_id)
else if (present(index)) then
column_ix = index
else
call log_error("read_logical_column", "column or index argument required.")
end if
! Skip lines after the header
if (present(skip)) call move_lines(file_id, skip)
! Set default or error if not found
if (column_ix == 0 .and. present(default)) then
array = default
return
else if (column_ix == 0) then
call input_error_column_not_found(column, file_id)
end if
! Fill array
do i = 1, size(array)
str_value = read_csv_item(column_ix, file_id)
read(str_value, *, iostat=ios) temp
if (ios /= 0 .or. .not. (temp == 1 .or. temp == 0)) &
call input_type_conversion_error(file_id, str_value, "0/1 logical", i+1, &
column_ix)
array(i) = temp == 1
end do
end subroutine read_logical_column