split_char_char Function

private pure function split_char_char(string, delimiter) result(parts)

Split a character string on a character delimiter.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: string
character(len=*), intent(in) :: delimiter

Return Value type(string_type), allocatable, (:)


Called by

proc~~split_char_char~~CalledByGraph proc~split_char_char split_char_char interface~split split interface~split->proc~split_char_char proc~split_char_string split_char_string interface~split->proc~split_char_string proc~split_string_char split_string_char interface~split->proc~split_string_char proc~split_string_string split_string_string interface~split->proc~split_string_string proc~split_char_string->proc~split_char_char proc~split_string_char->proc~split_char_char proc~split_string_string->proc~split_char_char

Variables

Type Visibility Attributes Name Initial
integer(kind=default_int), private :: hit
integer(kind=default_int), private :: i_part
integer(kind=default_int), private :: len_delim
integer(kind=default_int), private :: n_parts
integer(kind=default_int), private :: pos

Source Code

   pure function split_char_char(string, delimiter) result(parts)
      !! Split a character string on a character delimiter.
      character(len=*), intent(in) :: string
      character(len=*), intent(in) :: delimiter
      type(string_type), allocatable :: parts(:)

      integer(default_int) :: n_parts, len_delim, pos, hit, i_part

      len_delim = len(delimiter)
      if (len_delim == 0) then
         allocate (parts(1))
         parts(1) = string_type(string)
         return
      end if

      n_parts = 1
      pos = 1
      do
         hit = index(string(pos:), delimiter)
         if (hit == 0) exit
         n_parts = n_parts + 1
         pos = pos + hit - 1 + len_delim
      end do

      allocate (parts(n_parts))
      pos = 1
      do i_part = 1, n_parts - 1
         hit = index(string(pos:), delimiter)
         parts(i_part) = string_type(string(pos:pos + hit - 2))
         pos = pos + hit - 1 + len_delim
      end do
      parts(n_parts) = string_type(string(pos:))

   end function split_char_char