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