stringtool_obj_RemoveExtension Function

private pure function stringtool_obj_RemoveExtension(filename) result(val)

Removes file extension from filename while preserving scientific notation and dots in paths.

Type Bound

stringtool_obj

Arguments

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

File name

Return Value character(len=:), allocatable

Returned string with extension removed


Called by

proc~~stringtool_obj_removeextension~~CalledByGraph proc~stringtool_obj_removeextension stringtool_obj%stringtool_obj_RemoveExtension proc~eulerian_set_readhdf5 eulerian_set%eulerian_set_ReadHDF5 proc~eulerian_set_readhdf5->proc~stringtool_obj_removeextension proc~eulerian_set_writehdf5 eulerian_set%eulerian_set_WriteHDF5 proc~eulerian_set_writehdf5->proc~stringtool_obj_removeextension proc~hdf5_obj_open hdf5_obj%hdf5_obj_Open proc~hdf5_obj_open->proc~stringtool_obj_removeextension proc~marker_set_readhdf5 marker_set%marker_set_ReadHDF5 proc~marker_set_readhdf5->proc~stringtool_obj_removeextension proc~marker_set_writehdf5 marker_set%marker_set_WriteHDF5 proc~marker_set_writehdf5->proc~stringtool_obj_removeextension proc~particle_set_readhdf5 particle_set%particle_set_ReadHDF5 proc~particle_set_readhdf5->proc~stringtool_obj_removeextension proc~particle_set_writehdf5 particle_set%particle_set_WriteHDF5 proc~particle_set_writehdf5->proc~stringtool_obj_removeextension proc~respart_set_readhdf5 ResPart_set%ResPart_set_ReadHDF5 proc~respart_set_readhdf5->proc~stringtool_obj_removeextension proc~respart_set_readhdf5->proc~marker_set_readhdf5 proc~respart_set_writehdf5 ResPart_set%ResPart_set_WriteHDF5 proc~respart_set_writehdf5->proc~stringtool_obj_removeextension proc~respart_set_writehdf5->proc~marker_set_writehdf5 proc~silo_obj_init silo_obj%silo_obj_Init proc~silo_obj_init->proc~stringtool_obj_removeextension proc~solid_set_readhdf5 solid_set%solid_set_ReadHDF5 proc~solid_set_readhdf5->proc~stringtool_obj_removeextension proc~solid_set_readhdf5->proc~marker_set_readhdf5 proc~solid_set_writehdf5 solid_set%solid_set_WriteHDF5 proc~solid_set_writehdf5->proc~stringtool_obj_removeextension proc~solid_set_writehdf5->proc~marker_set_writehdf5 proc~xdmf_obj_write xdmf_obj%xdmf_obj_Write proc~xdmf_obj_write->proc~stringtool_obj_removeextension proc~eulerian_set_writesilo eulerian_set%eulerian_set_WriteSILO proc~eulerian_set_writesilo->proc~silo_obj_init proc~particle_set_writesilo particle_set%particle_set_WriteSilo proc~particle_set_writesilo->proc~silo_obj_init proc~respart_set_writesilo ResPart_set%ResPart_set_WriteSILO proc~respart_set_writesilo->proc~silo_obj_init proc~cdifs_obj_writeoutputdata cdifs_obj_WriteOutputData proc~cdifs_obj_writeoutputdata->proc~respart_set_writesilo proc~grans_obj_writeoutputdata grans_obj_WriteOutputData proc~grans_obj_writeoutputdata->proc~respart_set_writesilo interface~cdifs_obj_writeoutputdata cdifs_obj%cdifs_obj_WriteOutputData interface~cdifs_obj_writeoutputdata->proc~cdifs_obj_writeoutputdata interface~grans_obj_writeoutputdata grans_obj%grans_obj_WriteOutputData interface~grans_obj_writeoutputdata->proc~grans_obj_writeoutputdata proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->interface~cdifs_obj_writeoutputdata proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->interface~grans_obj_writeoutputdata interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver interface~grans_obj_preparesolver grans_obj%grans_obj_PrepareSolver interface~grans_obj_preparesolver->proc~grans_obj_preparesolver

Source Code

    pure function stringtool_obj_RemoveExtension(filename) result(val)
      !> Removes file extension from filename while preserving
      ! scientific notation and dots in paths.
      character(len=*), intent(in)  :: filename                                !! File name
      character(len=:), allocatable :: val                                     !! Returned string with extension removed
      ! Work variables
      integer :: last_slash
      integer :: last_dot
      logical :: is_extension
      character(len=:), allocatable :: ext

      val=trim(adjustl(filename))

      ! Find last path separator and last dot
      last_slash = index(val, '/', back=.true.)
      last_dot   = index(val, '.', back=.true.)

      ! Default: assume no extension
      is_extension = .false.

      if (last_dot.gt.0 .and. last_dot.gt.last_slash) then

        ! Grab possible file extension
        ext = val(last_dot+1:len_trim(val))

        ! Check whether this is a file extension or scientific notation
        if (len_trim(ext).gt.0) then
          if (scan(ext, 'Ee') .ne.1) then
            is_extension = .true.
          end if
        end if
      end if

      ! Remove extenstion
      if (is_extension) then
        val = val(:last_dot-1)
      end if

      return
    end function stringtool_obj_RemoveExtension