Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(string), | intent(in) | :: | self | |||
character(len=*), | intent(in) | :: | pattern | |||
type(string), | intent(out), | allocatable | :: | list(:) |
subroutine glob_string(self, pattern, list) !< Glob search (string 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 !< type(string), allocatable :: alist_str(:) !< 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_str) !< do f=1, Nf !< open(newunit=file_unit, file=files(f)) !< close(unit=file_unit, status='delete') !< enddo !< test_passed = .false. !< outer_str: do f=1, size(alist_str, dim=1) !< do ff=1, Nf !< test_passed = alist_str(f) == files(ff) !< if (test_passed) cycle outer_str !< enddo !< enddo outer_str !< print '(L1)', test_passed !<``` !=> T <<< class(string), intent(in) :: self !< The string. character(*), intent(in) :: pattern !< Given pattern. type(string), allocatable, intent(out) :: list(:) !< List of matching pathnames. type(string) :: tempfile !< Safe temporary file. character(len=:), allocatable :: tempname !< Safe temporary name. integer(I4P) :: tempunit !< Unit of temporary file. tempname = self%tempname() call execute_command_line('ls -1 '//trim(adjustl(pattern))//' > '//tempname) call tempfile%read_file(file=tempname) call tempfile%split(sep=new_line('a'), tokens=list) open(newunit=tempunit, file=tempname) close(unit=tempunit, status='delete') endsubroutine glob_string