index_ith Function

public pure function index_ith(substring, string, ith) result(res)

@brief This function return index of i'th substring in string @details if ind is negative, backward search will be result is equal 0 if search was failed @author Igor S. Gerasimov @date May, 2021 --Initial release-- @param substring - (in) @param string - (in) @param ith - (in) index of needed substring

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: substring
character(len=*), intent(in) :: string
integer, intent(in) :: ith

Return Value integer


Source Code

  pure integer function index_ith(substring, string, ith) result(res)
    character(len=*), intent(in) :: substring, string
    integer, intent(in) :: ith
    ! internal variables
    character(len=:), allocatable :: tmp_string
    integer :: i, diff
    res = 0
    tmp_string = string
    if (ith > 0) then
      do i = 1, ith
        diff = index(tmp_string, substring)
        res = res+diff
        if (diff == 0) then
          res = 0
          exit
        end if
        tmp_string = tmp_string(index(tmp_string, substring)+1:)
      end do
    else if (ith < 0) then
      do i = -1, ith, -1
        res = index(tmp_string, substring, back=.true.)
        if (res == 0) exit
        tmp_string = tmp_string(:index(tmp_string, substring, back=.true.)-1)
      end do
    else
      res = 0
    end if
  end function index_ith