Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(string), | intent(in) | :: | self | |||
type(string), | intent(in) | :: | substring | |||
integer, | intent(in) | :: | pos |
elemental function insert_string(self, substring, pos) result(inserted) !< Insert substring into string at a specified position. !< !<```fortran !< type(string) :: astring !< type(string) :: anotherstring !< logical :: test_passed(5) !< astring = 'this is string example wow!!!' !< anotherstring = '... ' !< test_passed(1) = astring%insert(substring=anotherstring, pos=1)//''=='... this is string example wow!!!' !< test_passed(2) = astring%insert(substring=anotherstring, pos=23)//''=='this is string example... wow!!!' !< test_passed(3) = astring%insert(substring=anotherstring, pos=29)//''=='this is string example wow!!!... ' !< test_passed(4) = astring%insert(substring=anotherstring, pos=-1)//''=='... this is string example wow!!!' !< test_passed(5) = astring%insert(substring=anotherstring, pos=100)//''=='this is string example wow!!!... ' !< print '(L1)', all(test_passed) !<``` !=> T <<< class(string), intent(in) :: self !< The string. type(string), intent(in) :: substring !< Substring. integer, intent(in) :: pos !< Position from which insert substring. type(string) :: inserted !< Inserted string. integer :: safepos !< Safe position from which insert substring. if (allocated(self%raw)) then inserted = self if (allocated(substring%raw)) then safepos = min(max(1, pos), len(self%raw)) if (safepos==1) then inserted%raw = substring%raw//self%raw elseif (safepos==len(self%raw)) then inserted%raw = self%raw//substring%raw else inserted%raw = self%raw(1:safepos-1)//substring%raw//self%raw(safepos:) endif endif else if (allocated(substring%raw)) inserted%raw = substring%raw endif endfunction insert_string