to_logical Subroutine

private pure elemental subroutine to_logical(str, val, status_ok)

Convert a string to a logical

  • Evaluates to .true. for strings ['1','t','true','.true.']
  • Evaluates to .false. for strings ['0','f','false','.false.']

The string match is not case sensitive.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: str
logical, intent(out) :: val
logical, intent(out) :: status_ok

Calls

proc~~to_logical~~CallsGraph proc~to_logical to_logical proc~lowercase_string lowercase_string proc~to_logical->proc~lowercase_string

Called by

proc~~to_logical~~CalledByGraph proc~to_logical to_logical proc~csv_get_value csv_file%csv_get_value proc~csv_get_value->proc~to_logical proc~infer_variable_type infer_variable_type proc~infer_variable_type->proc~to_logical proc~get_column csv_file%get_column proc~get_column->proc~csv_get_value proc~variable_types csv_file%variable_types proc~variable_types->proc~infer_variable_type proc~get_character_column csv_file%get_character_column proc~get_character_column->proc~get_column proc~get_csv_string_column csv_file%get_csv_string_column proc~get_csv_string_column->proc~get_column proc~get_integer_column csv_file%get_integer_column proc~get_integer_column->proc~get_column proc~get_logical_column csv_file%get_logical_column proc~get_logical_column->proc~get_column proc~get_real_sp_column csv_file%get_real_sp_column proc~get_real_sp_column->proc~get_column proc~get_real_wp_column csv_file%get_real_wp_column proc~get_real_wp_column->proc~get_column

Source Code

    pure elemental subroutine to_logical(str,val,status_ok)

    implicit none

    character(len=*),intent(in) :: str
    logical,intent(out) :: val
    logical,intent(out) :: status_ok

    character(len=:),allocatable :: tmp

    ! True and False options (all lowercase):
    character(len=*),dimension(4),parameter :: true_str  = ['1     ',&
                                                            't     ',&
                                                            'true  ',&
                                                            '.true.']
    character(len=*),dimension(4),parameter :: false_str = ['0      ',&
                                                            'f      ',&
                                                            'false  ',&
                                                            '.false.']

    tmp = lowercase_string(str)
    if ( any(tmp==true_str) ) then
        val = .true.
        status_ok = .true.
    else if ( any(tmp==false_str) ) then
        val = .false.
        status_ok = .true.
    else
        val = .false.
        status_ok = .false.
    end if

    end subroutine to_logical