string_to_integer Function

private function string_to_integer(str) result(ival)

Arguments

Type IntentOptional AttributesName
character(kind=CK,len=*), intent(in) :: str

Return Value integer(kind=IK)

Description

Convert a string into an integer.

History

  • Jacob Williams : 12/10/2013 : Rewrote routine. Added error checking.
  • Modified by Izaak Beekman

Calls

proc~~string_to_integer~~CallsGraph proc~string_to_integer string_to_integer interface~throw_exception throw_exception proc~string_to_integer->interface~throw_exception proc~json_throw_exception json_throw_exception interface~throw_exception->proc~json_throw_exception
Help

Called By

proc~~string_to_integer~~CalledByGraph proc~string_to_integer string_to_integer proc~parse_number parse_number proc~parse_number->proc~string_to_integer proc~json_get_by_path json_get_by_path proc~json_get_by_path->proc~string_to_integer proc~parse_value parse_value proc~parse_value->proc~parse_number proc~parse_object parse_object proc~parse_value->proc~parse_object proc~parse_array parse_array proc~parse_value->proc~parse_array proc~json_parse_string json_parse_string proc~json_parse_string->proc~parse_value proc~json_parse_file json_parse_file proc~json_parse_file->proc~parse_value proc~parse_object->proc~parse_value proc~parse_object->proc~parse_object proc~parse_array->proc~parse_value proc~wrap_json_parse_string wrap_json_parse_string proc~wrap_json_parse_string->proc~json_parse_string interface~json_parse json_parse interface~json_parse->proc~json_parse_string interface~json_parse->proc~json_parse_file proc~test_14 test_14 proc~test_14->interface~json_parse proc~test_8 test_8 proc~test_8->interface~json_parse proc~json_file_load json_file_load proc~json_file_load->interface~json_parse proc~json_file_load_from_string json_file_load_from_string proc~json_file_load_from_string->interface~json_parse program~jf_test_14 jf_test_14 program~jf_test_14->proc~test_14 program~jf_test_8 jf_test_8 program~jf_test_8->proc~test_8 proc~wrap_json_file_load_from_string wrap_json_file_load_from_string proc~wrap_json_file_load_from_string->proc~json_file_load_from_string proc~json_file_get_object json_file_get_object proc~json_file_get_object->proc~json_get_by_path proc~json_get_string_with_path json_get_string_with_path proc~json_get_string_with_path->proc~json_get_by_path proc~json_get_logical_with_path json_get_logical_with_path proc~json_get_logical_with_path->proc~json_get_by_path proc~json_get_double_with_path json_get_double_with_path proc~json_get_double_with_path->proc~json_get_by_path proc~json_get_integer_with_path json_get_integer_with_path proc~json_get_integer_with_path->proc~json_get_by_path proc~json_get_array_with_path json_get_array_with_path proc~json_get_array_with_path->proc~json_get_by_path proc~wrap_json_get_by_path wrap_json_get_by_path proc~wrap_json_get_by_path->proc~json_get_by_path proc~wrap_json_file_get_object wrap_json_file_get_object proc~wrap_json_file_get_object->proc~json_file_get_object proc~wrap_json_get_string_with_path wrap_json_get_string_with_path proc~wrap_json_get_string_with_path->proc~json_get_string_with_path interface~json_get json_get interface~json_get->proc~json_get_by_path interface~json_get->proc~json_get_string_with_path interface~json_get->proc~json_get_logical_with_path interface~json_get->proc~json_get_double_with_path interface~json_get->proc~json_get_integer_with_path interface~json_get->proc~json_get_array_with_path proc~json_get_logical_vec_with_path json_get_logical_vec_with_path interface~json_get->proc~json_get_logical_vec_with_path proc~json_get_string_vec_with_path json_get_string_vec_with_path interface~json_get->proc~json_get_string_vec_with_path proc~json_get_logical_vec json_get_logical_vec interface~json_get->proc~json_get_logical_vec proc~json_get_integer_vec json_get_integer_vec interface~json_get->proc~json_get_integer_vec proc~json_get_integer_vec_with_path json_get_integer_vec_with_path interface~json_get->proc~json_get_integer_vec_with_path proc~json_get_double_vec_with_path json_get_double_vec_with_path interface~json_get->proc~json_get_double_vec_with_path proc~json_get_string_vec json_get_string_vec interface~json_get->proc~json_get_string_vec proc~json_get_double_vec json_get_double_vec interface~json_get->proc~json_get_double_vec proc~json_file_get_string json_file_get_string proc~json_file_get_string->interface~json_get proc~json_file_get_string_vec json_file_get_string_vec proc~json_file_get_string_vec->interface~json_get proc~json_get_logical_vec_with_path->interface~json_get proc~test_12 test_12 proc~test_12->interface~json_get interface~json_update json_update proc~test_12->interface~json_update proc~json_value_remove_if_present json_value_remove_if_present proc~json_value_remove_if_present->interface~json_get proc~json_get_string_vec_with_path->interface~json_get proc~json_file_get_integer json_file_get_integer proc~json_file_get_integer->interface~json_get proc~rename rename proc~rename->interface~json_get proc~rename->interface~json_update proc~json_get_logical_vec->interface~json_get proc~test_2 test_2 proc~test_2->interface~json_get proc~test_2->interface~json_update proc~test_7 test_7 proc~test_7->interface~json_get proc~json_file_get_integer_vec json_file_get_integer_vec proc~json_file_get_integer_vec->interface~json_get proc~json_file_get_double json_file_get_double proc~json_file_get_double->interface~json_get proc~json_update_logical json_update_logical proc~json_update_logical->interface~json_get proc~json_get_integer_vec->interface~json_get proc~json_file_get_double_vec json_file_get_double_vec proc~json_file_get_double_vec->interface~json_get proc~json_update_double json_update_double proc~json_update_double->interface~json_get proc~json_get_integer_vec_with_path->interface~json_get proc~json_update_integer json_update_integer proc~json_update_integer->interface~json_get proc~json_file_get_logical json_file_get_logical proc~json_file_get_logical->interface~json_get proc~json_get_double_vec_with_path->interface~json_get proc~json_update_string json_update_string proc~json_update_string->interface~json_get proc~json_get_string_vec->interface~json_get proc~json_get_double_vec->interface~json_get proc~json_file_get_logical_vec json_file_get_logical_vec proc~json_file_get_logical_vec->interface~json_get proc~test_10 test_10 proc~test_10->interface~json_get interface~json_remove_if_present json_remove_if_present proc~test_10->interface~json_remove_if_present proc~test_10->interface~json_update proc~wrap_json_file_get_string wrap_json_file_get_string proc~wrap_json_file_get_string->proc~json_file_get_string proc~wrap_json_file_get_string_vec wrap_json_file_get_string_vec proc~wrap_json_file_get_string_vec->proc~json_file_get_string_vec proc~wrap_json_get_logical_vec_with_path wrap_json_get_logical_vec_with_path proc~wrap_json_get_logical_vec_with_path->proc~json_get_logical_vec_with_path program~jf_test_12 jf_test_12 program~jf_test_12->proc~test_12 proc~wrap_json_value_remove_if_present wrap_json_value_remove_if_present proc~wrap_json_value_remove_if_present->proc~json_value_remove_if_present interface~json_remove_if_present->proc~json_value_remove_if_present proc~wrap_json_get_string_vec_with_path wrap_json_get_string_vec_with_path proc~wrap_json_get_string_vec_with_path->proc~json_get_string_vec_with_path proc~wrap_json_file_get_integer wrap_json_file_get_integer proc~wrap_json_file_get_integer->proc~json_file_get_integer program~jf_test_2 jf_test_2 program~jf_test_2->proc~test_2 program~jf_test_7 jf_test_7 program~jf_test_7->proc~test_7 proc~wrap_json_file_get_integer_vec wrap_json_file_get_integer_vec proc~wrap_json_file_get_integer_vec->proc~json_file_get_integer_vec proc~wrap_json_file_get_double wrap_json_file_get_double proc~wrap_json_file_get_double->proc~json_file_get_double proc~wrap_json_update_logical wrap_json_update_logical proc~wrap_json_update_logical->proc~json_update_logical interface~json_update->proc~json_update_logical interface~json_update->proc~json_update_double interface~json_update->proc~json_update_integer interface~json_update->proc~json_update_string proc~json_file_update_integer json_file_update_integer proc~json_file_update_integer->interface~json_update proc~json_file_update_string json_file_update_string proc~json_file_update_string->interface~json_update proc~test_1 test_1 proc~test_1->interface~json_update proc~json_file_update_real json_file_update_real proc~json_file_update_real->interface~json_update proc~json_file_update_logical json_file_update_logical proc~json_file_update_logical->interface~json_update proc~wrap_json_file_update_integer wrap_json_file_update_integer proc~wrap_json_file_update_integer->proc~json_file_update_integer proc~json_file_update_string_name_ascii json_file_update_string_name_ascii proc~json_file_update_string_name_ascii->proc~json_file_update_string proc~wrap_json_file_update_string wrap_json_file_update_string proc~wrap_json_file_update_string->proc~json_file_update_string proc~json_file_update_string_val_ascii json_file_update_string_val_ascii proc~json_file_update_string_val_ascii->proc~json_file_update_string program~jf_test_1 jf_test_1 program~jf_test_1->proc~test_1 proc~wrap_json_file_update_real wrap_json_file_update_real proc~wrap_json_file_update_real->proc~json_file_update_real proc~wrap_json_file_update_logical wrap_json_file_update_logical proc~wrap_json_file_update_logical->proc~json_file_update_logical proc~wrap_json_file_get_double_vec wrap_json_file_get_double_vec proc~wrap_json_file_get_double_vec->proc~json_file_get_double_vec proc~wrap_json_update_double wrap_json_update_double proc~wrap_json_update_double->proc~json_update_double proc~wrap_json_get_integer_vec_with_path wrap_json_get_integer_vec_with_path proc~wrap_json_get_integer_vec_with_path->proc~json_get_integer_vec_with_path proc~wrap_json_update_integer wrap_json_update_integer proc~wrap_json_update_integer->proc~json_update_integer proc~wrap_json_file_get_logical wrap_json_file_get_logical proc~wrap_json_file_get_logical->proc~json_file_get_logical proc~wrap_json_get_double_vec_with_path wrap_json_get_double_vec_with_path proc~wrap_json_get_double_vec_with_path->proc~json_get_double_vec_with_path proc~json_update_string_name_ascii json_update_string_name_ascii proc~json_update_string_name_ascii->proc~json_update_string proc~wrap_json_update_string wrap_json_update_string proc~wrap_json_update_string->proc~json_update_string proc~json_update_string_val_ascii json_update_string_val_ascii proc~json_update_string_val_ascii->proc~json_update_string proc~wrap_json_file_get_logical_vec wrap_json_file_get_logical_vec proc~wrap_json_file_get_logical_vec->proc~json_file_get_logical_vec program~jf_test_10 jf_test_10 program~jf_test_10->proc~test_10 proc~wrap_json_get_logical_with_path wrap_json_get_logical_with_path proc~wrap_json_get_logical_with_path->proc~json_get_logical_with_path proc~wrap_json_get_double_with_path wrap_json_get_double_with_path proc~wrap_json_get_double_with_path->proc~json_get_double_with_path proc~wrap_json_get_integer_with_path wrap_json_get_integer_with_path proc~wrap_json_get_integer_with_path->proc~json_get_integer_with_path proc~wrap_json_get_array_with_path wrap_json_get_array_with_path proc~wrap_json_get_array_with_path->proc~json_get_array_with_path
Help

Variables

TypeVisibility AttributesNameInitial
character(kind=CDK,len=:), public, allocatable:: digits
integer(kind=IK), public :: ndigits_digits
integer(kind=IK), public :: ndigits
integer(kind=IK), public :: ierr

Source Code

    function string_to_integer(str) result(ival)

    implicit none

    character(kind=CK,len=*),intent(in) :: str
    integer(IK) :: ival

    character(kind=CDK,len=:),allocatable :: digits
    integer(IK) :: ndigits_digits,ndigits,ierr

    if (.not. exception_thrown) then

        ! Compute how many digits we need to read
        ndigits = 2*len_trim(str)
        ndigits_digits = floor(log10(real(ndigits)))+1
        allocate(character(kind=CDK,len=ndigits_digits) :: digits)
        write(digits,'(I0)') ndigits !gfortran will have a runtime error with * edit descriptor here
        ! gfortran bug: '*' edit descriptor for ISO_10646 strings does bad stuff.
        read(str,'(I'//trim(digits)//')',iostat=ierr) ival   !string to integer

        if (ierr/=0) then    !if there was an error
            ival = 0
            call throw_exception('Error in string_to_integer:'//&
                                 ' string cannot be converted to an integer: '//trim(str))
        end if

    else
        ival = 0
    end if

    end function string_to_integer