Return the base file name of a string containing a file name.
Optionally, the extension is also stripped if provided or the last one if required, e.g.
type(string) :: astring
logical :: test_passed(5)
astring = 'bar/foo.tar.bz2'
test_passed(1) = astring%basename()//''=='foo.tar.bz2'
test_passed(2) = astring%basename(extension='.tar.bz2')//''=='foo'
test_passed(3) = astring%basename(strip_last_extension=.true.)//''=='foo.tar'
astring = '\bar\foo.tar.bz2'
test_passed(4) = astring%basename(sep='\')//''=='foo.tar.bz2'
astring = 'bar'
test_passed(5) = astring%basename(strip_last_extension=.true.)//''=='bar'
print '(L1)', all(test_passed)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(string), | intent(in) | :: | self |
The string. |
||
character(kind=CK, len=*), | intent(in), | optional | :: | sep |
Directory separator. |
|
character(kind=CK, len=*), | intent(in), | optional | :: | extension |
File extension. |
|
logical, | intent(in), | optional | :: | strip_last_extension |
Flag to enable the stripping of last extension. |
Base file name.
elemental function basename(self, sep, extension, strip_last_extension) !< Return the base file name of a string containing a file name. !< !< Optionally, the extension is also stripped if provided or the last one if required, e.g. !< !<```fortran !< type(string) :: astring !< logical :: test_passed(5) !< astring = 'bar/foo.tar.bz2' !< test_passed(1) = astring%basename()//''=='foo.tar.bz2' !< test_passed(2) = astring%basename(extension='.tar.bz2')//''=='foo' !< test_passed(3) = astring%basename(strip_last_extension=.true.)//''=='foo.tar' !< astring = '\bar\foo.tar.bz2' !< test_passed(4) = astring%basename(sep='\')//''=='foo.tar.bz2' !< astring = 'bar' !< test_passed(5) = astring%basename(strip_last_extension=.true.)//''=='bar' !< print '(L1)', all(test_passed) !<``` !=> T <<< class(string), intent(in) :: self !< The string. character(kind=CK, len=*), intent(in), optional :: sep !< Directory separator. character(kind=CK, len=*), intent(in), optional :: extension !< File extension. logical, intent(in), optional :: strip_last_extension !< Flag to enable the stripping of last extension. type(string) :: basename !< Base file name. character(kind=CK, len=:), allocatable :: sep_ !< Separator, default value. integer :: pos !< Character position. if (allocated(self%raw)) then sep_ = UIX_DIR_SEP ; if (present(sep)) sep_ = sep basename = self pos = index(basename%raw, sep_, back=.true.) if (pos>0) basename%raw = self%raw(pos+1:) if (present(extension)) then pos = index(basename%raw, extension, back=.true.) if (pos>0) basename%raw = basename%raw(1:pos-1) elseif (present(strip_last_extension)) then if (strip_last_extension) then pos = index(basename%raw, '.', back=.true.) if (pos>0) basename%raw = basename%raw(1:pos-1) endif endif endif endfunction basename