2

フォルダからすべてのファイルを読み取る必要がありますが、そこにファイルがいくつあるかわかりません。

それらをすべて開く方法は知っていますが、停止するタイミング、つまりすべてのファイルを読み取るタイミングがわからないだけです。

4

1 に答える 1

4

ファイル名を生成する特定のルール (mydata001.dat、mydata002.dat など) がある場合は、ファイル名を生成するたびに、inquireステートメントでファイルが存在するかどうかを確認できます。初めて存在しない場合は、停止できます。以下のプログラムは、次のことを示しています。

program proba
  implicit none

  character(len=20) :: buffer
  logical :: exist
  integer :: ind

  ind = 1
  fileloop: do
    write(buffer,"(A,I3.3,A)") "mydata", ind, ".dat"
    inquire(file=buffer, exist=exist)
    if (.not. exist) then
      write(*,*) "File '", trim(buffer), "' not found, exiting loop"
      exit
    end if
    write(*,*) "File: '", trim(buffer), "' found."
    ind = ind + 1
  end do fileloop

end program proba

または、ルールに従ってファイル名を生成できない場合は、ディレクトリ内のファイルのリストを取得できるいくつかのライブラリを使用できます。1 つの可能性は、次の方法で任意のディレクトリ コンテンツに対して実行できる私のmodFileSysライブラリです。

program test_ls
  use filesys_module

  type(dirdesc) :: dir
  character(:), allocatable :: path

  call opendir("./", dir)
  path = dir%next_filename()
  do while (len(path) > 0)
    write(*, "(A)") path
    path = dir%next_filename()
  end do

end program test_ls
于 2013-04-03T15:50:01.840 に答える