join_char Function

private pure function join_char(strings, separator) result(joined)

Joins a list of strings with a separator (default: space). Returns a new string

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: strings(:)
character(len=*), intent(in), optional :: separator

Return Value character(len=:), allocatable


Called by

proc~~join_char~~CalledByGraph proc~join_char join_char interface~join join interface~join->proc~join_char

Variables

Type Visibility Attributes Name Initial
integer, private :: i
integer, private :: lt
integer, private :: ltot
integer, private :: pos
character(len=:), private, allocatable :: sep

Source Code

   pure function join_char(strings, separator) result(joined)
      character(*), intent(in) :: strings(:)
      character(len=*), intent(in), optional :: separator
      character(len=:), allocatable :: joined
      integer :: ltot, i, lt, pos
      character(len=:), allocatable :: sep
      ! Determine separator: use user-provided separator or default space
      if (present(separator)) then
         sep = separator
      else
         sep = ' '
      end if
      ! Calculate the total length required, including separators
      ltot = sum(len_trim(strings)) + (size(strings) - 1)*len(sep)
      allocate (character(len=ltot) :: joined)

      joined = repeat(' ', ltot)
      ! Concatenate strings with separator
      pos = 0
      do i = 1, size(strings)
         lt = len_trim(strings(i))
         joined(pos + 1:pos + lt) = strings(i) (1:lt)
         pos = pos + lt
         if (i < size(strings)) then
            joined(pos + 1:pos + len(sep)) = sep
            pos = pos + len(sep)
         end if
      end do
   end function join_char