partition Function

private pure function partition(self, sep) result(partitions)

Type Bound

string

Arguments

Type IntentOptional Attributes Name
class(string), intent(in) :: self
character(kind=CK, len=*), intent(in), optional :: sep

Return Value type(string), (1:3)


Called by

proc~~partition~~CalledByGraph proc~partition string%partition proc~add_stream_attributes xml_tag%add_stream_attributes proc~add_stream_attributes->proc~partition proc~split string%split proc~split->proc~partition program~volatile_doctest~1596 volatile_doctest program~volatile_doctest~1596->proc~partition program~volatile_doctest~1698 volatile_doctest program~volatile_doctest~1698->proc~partition none~add_attributes xml_tag%add_attributes none~add_attributes->proc~add_stream_attributes proc~camelcase string%camelcase proc~camelcase->proc~split proc~glob_string string%glob_string proc~glob_string->proc~split proc~set xml_tag%set proc~set->proc~add_stream_attributes proc~snakecase string%snakecase proc~snakecase->proc~split proc~split_chunked string%split_chunked proc~split_chunked->proc~split proc~startcase string%startcase proc~startcase->proc~split proc~write_lines string%write_lines proc~write_lines->proc~split proc~write_parallel_block_files_string xml_writer_abstract%write_parallel_block_files_string proc~write_parallel_block_files_string->proc~split program~stringifor_test_csv_naive_parser stringifor_test_csv_naive_parser program~stringifor_test_csv_naive_parser->proc~split program~stringifor_test_csv_naive_parser~2 stringifor_test_csv_naive_parser program~stringifor_test_csv_naive_parser~2->proc~split program~stringifor_test_parse_large_csv stringifor_test_parse_large_csv program~stringifor_test_parse_large_csv->proc~split program~stringifor_test_parse_large_csv->proc~split_chunked program~stringifor_test_parse_large_csv~2 stringifor_test_parse_large_csv program~stringifor_test_parse_large_csv~2->proc~split program~stringifor_test_parse_large_csv~2->proc~split_chunked program~volatile_doctest~1067 volatile_doctest program~volatile_doctest~1067->proc~split program~volatile_doctest~1239 volatile_doctest program~volatile_doctest~1239->proc~split program~volatile_doctest~1411 volatile_doctest program~volatile_doctest~1411->proc~split program~volatile_doctest~1418 volatile_doctest program~volatile_doctest~1418->proc~split program~volatile_doctest~1808 volatile_doctest program~volatile_doctest~1808->proc~split program~volatile_doctest~1878 volatile_doctest program~volatile_doctest~1878->proc~split proc~write_file string%write_file program~volatile_doctest~1878->proc~write_file program~volatile_doctest~511 volatile_doctest program~volatile_doctest~511->proc~split program~volatile_doctest~883 volatile_doctest program~volatile_doctest~883->proc~split program~volatile_doctest~926 volatile_doctest program~volatile_doctest~926->proc~split program~volatile_doctest~955 volatile_doctest program~volatile_doctest~955->proc~split program~volatile_doctest~955->proc~write_file interface~glob glob interface~glob->proc~glob_string proc~glob_character string%glob_character interface~glob->proc~glob_character none~glob string%glob none~glob->proc~glob_string none~glob->proc~glob_character none~write_parallel_block_files xml_writer_abstract%write_parallel_block_files none~write_parallel_block_files->proc~write_parallel_block_files_string proc~create_tag_flat create_tag_flat proc~create_tag_flat->proc~set proc~create_tag_nested create_tag_nested proc~create_tag_nested->proc~set proc~parse_from_string xml_file%parse_from_string proc~parse_from_string->proc~set proc~write_file->proc~write_lines program~foxy_test_add_attributes foxy_test_add_attributes program~foxy_test_add_attributes->none~add_attributes program~foxy_test_create_tag foxy_test_create_tag program~foxy_test_create_tag->proc~set program~volatile_doctest~1041 volatile_doctest program~volatile_doctest~1041->proc~snakecase program~volatile_doctest~1069 volatile_doctest program~volatile_doctest~1069->proc~startcase program~volatile_doctest~1146 volatile_doctest program~volatile_doctest~1146->proc~camelcase program~volatile_doctest~1262 volatile_doctest program~volatile_doctest~1262->proc~camelcase program~volatile_doctest~43 volatile_doctest program~volatile_doctest~43->proc~split_chunked program~volatile_doctest~758 volatile_doctest program~volatile_doctest~758->proc~startcase program~volatile_doctest~807 volatile_doctest program~volatile_doctest~807->proc~split_chunked program~volatile_doctest~893 volatile_doctest program~volatile_doctest~893->proc~snakecase interface~xml_tag xml_tag interface~xml_tag->proc~create_tag_flat interface~xml_tag->proc~create_tag_nested proc~glob_character->none~glob proc~parse_scratch_files vtm_file%parse_scratch_files proc~parse_scratch_files->none~write_parallel_block_files none~write_block vtm_file%write_block proc~parse_scratch_files->none~write_block proc~parse~2 xml_file%parse proc~parse~2->proc~parse_from_string proc~write_block_array vtm_file%write_block_array proc~write_block_array->none~write_parallel_block_files proc~write_block_string vtm_file%write_block_string proc~write_block_string->none~write_parallel_block_files program~volatile_doctest~1403 volatile_doctest program~volatile_doctest~1403->interface~glob program~volatile_doctest~1623 volatile_doctest program~volatile_doctest~1623->none~glob program~volatile_doctest~1765 volatile_doctest program~volatile_doctest~1765->none~glob program~volatile_doctest~26 volatile_doctest program~volatile_doctest~26->interface~glob program~volatile_doctest~321 volatile_doctest program~volatile_doctest~321->none~glob program~volatile_doctest~464 volatile_doctest program~volatile_doctest~464->none~glob none~write_block->proc~write_block_array none~write_block->proc~write_block_string proc~finalize vtm_file%finalize proc~finalize->proc~parse_scratch_files program~foxy_test_delete_tag foxy_test_delete_tag program~foxy_test_delete_tag->proc~parse~2 program~foxy_test_parse_file_simple foxy_test_parse_file_simple program~foxy_test_parse_file_simple->proc~parse~2 program~foxy_test_parse_string_nested_tags foxy_test_parse_string_nested_tags program~foxy_test_parse_string_nested_tags->proc~parse~2 program~foxy_test_parse_string_simple foxy_test_parse_string_simple program~foxy_test_parse_string_simple->proc~parse~2 program~foxy_test_write_tag foxy_test_write_tag program~foxy_test_write_tag->proc~parse~2 proc~initialize vtm_file%initialize proc~initialize->proc~finalize program~vtk_fortran_write_vtm vtk_fortran_write_vtm program~vtk_fortran_write_vtm->none~write_block

Source Code

   pure function partition(self, sep) result(partitions)
   !< Split string at separator and return the 3 parts (before, the separator and after).
   !<
   !<```fortran
   !< type(string) :: astring
   !< type(string) :: strings(3)
   !< logical      :: test_passed(3)
   !< astring = 'Hello WorLD!'
   !< strings = astring%partition(sep='lo Wo')
   !< test_passed(1) = (strings(1)//''=='Hel'.and.strings(2)//''=='lo Wo'.and.strings(3)//''=='rLD!')
   !< strings = astring%partition(sep='Hello')
   !< test_passed(2) = (strings(1)//''==''.and.strings(2)//''=='Hello'.and.strings(3)//''==' WorLD!')
   !< astring = 'Hello WorLD!'
   !< strings = astring%partition()
   !< test_passed(3) = (strings(1)//''=='Hello'.and.strings(2)//''==' '.and.strings(3)//''=='WorLD!')
   !< print '(L1)', all(test_passed)
   !<```
   !=> T <<<
   class(string),             intent(in)           :: self            !< The string.
   character(kind=CK, len=*), intent(in), optional :: sep             !< Separator.
   type(string)                                    :: partitions(1:3) !< Partions: before the separator, the separator itsels and
                                                                      !< after the separator.
   character(kind=CK, len=:), allocatable          :: sep_            !< Separator, default value.
   integer                                         :: c               !< Character counter.

   if (allocated(self%raw)) then
      sep_ = SPACE ; if (present(sep)) sep_ = sep

      partitions(1) = self
      partitions(2) = sep_
      partitions(3) = ''
      if (len(sep_)>=len(self%raw)) return
      c = index(self%raw, sep_)
      if (c>0) then
         partitions(1)%raw = self%raw(1:c-1)
         partitions(2)%raw = self%raw(c:c+len(sep_)-1)
         partitions(3)%raw = self%raw(c+len(sep_):)
      endif
   endif
   endfunction partition