public subroutine DirList(dir, list, nfiles, filext)
return a list of files in a directory
Arguments
Type |
Intent | Optional | Attributes |
|
Name |
|
character(len=*),
|
intent(in) |
|
|
:: |
dir |
|
character(len=*),
|
intent(out) |
|
|
:: |
list |
|
integer(kind=short),
|
intent(out) |
|
|
:: |
nfiles |
|
character(len=*),
|
intent(in), |
optional |
|
:: |
filext |
|
Variables
Type |
Visibility | Attributes |
|
Name |
| Initial | |
character(len=1000),
|
public |
|
:: |
cmd |
|
|
|
integer(kind=short),
|
public |
|
:: |
i |
|
|
|
integer(kind=short),
|
public |
|
:: |
ios |
|
|
|
character(len=300),
|
public |
|
:: |
string |
|
|
|
integer(kind=short),
|
public |
|
:: |
unit |
|
|
|
Source Code
SUBROUTINE DirList &
!
(dir, list, nfiles, filext)
IMPLICIT NONE
!Arguments with intent(in):
CHARACTER (LEN = *), INTENT(IN) :: dir
!Optional arguments with intent(in):
CHARACTER (LEN = *), OPTIONAL, INTENT(IN) :: filext
!Arguments with intent (out):
CHARACTER (LEN = *), INTENT(OUT) :: list
INTEGER (KIND = short), INTENT (OUT) :: nfiles
! Local declarations:
CHARACTER (LEN = 1000) :: cmd
INTEGER (KIND = short) :: unit, i, ios
CHARACTER (LEN = 300) :: string
!------------end of declaration------------------------------------------------
IF (PRESENT (filext)) THEN !filter files for file extension
IF (GetOS () == WIN32) THEN !detected Windows OS
cmd = 'dir ' // TRIM(dir) // '*.' // TRIM(filext) // ' /b/a:-d > ' &
// TRIM (dir) // 'list.txt'
CALL System (cmd)
ELSE !detected unix like OS, including linux
!cmd = 'ls *.' // TRIM(filext) // ' ' // TRIM(dir) // ' > ' // TRIM (dir) // 'list.txt'
cmd = 'find ' // TRIM(dir) // ' -name "*.' // TRIM(filext) // &
'" -printf "%f\n" > ' // TRIM (dir) // 'list.txt'
CALL System (cmd)
END IF
ELSE
IF (GetOS () == WIN32) THEN !detected Windows OS
cmd = 'dir ' // TRIM(dir) // ' /b/a:-d > ' // TRIM (dir) // 'list.txt'
CALL System (cmd)
ELSE !detected unix like OS, including linux
cmd = 'ls *.?*' // dir // ' > ' // TRIM (dir) // 'list.txt'
cmd = 'find ' // TRIM(dir) // ' -name "*.?*' // '" -printf "%f\n" > ' &
// TRIM (dir) // 'list.txt'
CALL System (cmd)
END IF
END IF
unit = GetUnit ()
OPEN (unit = unit, file = TRIM (dir) // 'list.txt')
list = ''
nfiles = 0
DO
READ(unit,*,IOSTAT = ios) string
IF (ios < 0) THEN !end of file reached
EXIT
ELSE
nfiles = nfiles + 1
IF (nfiles == 1) THEN
list(1:) = TRIM (string)
ELSE
list(LEN_TRIM (list)+1:) = ',' // TRIM (string)
END IF
END IF
END DO
CLOSE (unit)
END SUBROUTINE DirList