Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(string), | intent(in) | :: | self | |||
character(len=*), | 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