Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(string), | intent(in) | :: | self | |||
character, | intent(in) | :: | pattern | |||
character(len=:), | intent(out), | allocatable | :: | list(:) |
subroutine glob_character(self, pattern, list)
!< Glob search (character output), finds all the pathnames matching a given pattern according to the rules used by the Unix shell.
!<
!< @note Method not portable: works only on Unix/GNU Linux OS.
!<
!<```fortran
!< type(string) :: astring
!< character(len=:), allocatable :: alist_chr(:)
!< integer, parameter :: Nf=5
!< character(14) :: files(1:Nf)
!< integer :: file_unit
!< integer :: f
!< integer :: ff
!< logical :: test_passed
!< do f=1, Nf
!< files(f) = astring%tempname(prefix='foo-')
!< open(newunit=file_unit, file=files(f))
!< write(file_unit, *)f
!< close(unit=file_unit)
!< enddo
!< call astring%glob(pattern='foo-*', list=alist_chr)
!< do f=1, Nf
!< open(newunit=file_unit, file=files(f))
!< close(unit=file_unit, status='delete')
!< enddo
!< test_passed = .false.
!< outer_chr: do f=1, size(alist_chr, dim=1)
!< do ff=1, Nf
!< test_passed = alist_chr(f) == files(ff)
!< if (test_passed) cycle outer_chr
!< enddo
!< enddo outer_chr
!< print '(L1)', test_passed
!<```
!=> T <<<
class(string), intent(in) :: self !< The string.
character(*), intent(in) :: pattern !< Given pattern.
character(len=:), allocatable, intent(out) :: list(:) !< List of matching pathnames.
type(string), allocatable :: list_(:) !< List of matching pathnames.
integer(I4P) :: max_len !< Maximum length.
integer(I4P) :: matches_number !< Matches number.
integer(I4P) :: m !< Counter.
call self%glob(pattern=pattern, list=list_)
if (allocated(list_)) then
matches_number = size(list_, dim=1)
max_len = 0
do m=1, matches_number
max_len = max(max_len, list_(m)%len())
enddo
allocate(character(max_len) :: list(1:matches_number))
do m=1, matches_number
list(m) = list_(m)%chars()
enddo
endif
endsubroutine glob_character