13

ファイルを開いて解析するライブラリを開発する必要があります。Fortran IO スタイルのため、ユニット番号は自分で決定する必要がありますが、クライアント コードで他のどのユニットが開いているかわかりません。のような標準機能はありgive_me_any_unit_number_that_is_free()ますか?

4

2 に答える 2

31

fortran 2008には、使用できるnewunit句があります。

   integer :: myunit

   ..
   open(newunit=myunit,file='file.dat')
   ...
   close(myunit)

しかし、それは十分に新しいので、すべてのコンパイラがまだそれをサポートしているわけではありません。まだの場合は、自分でモックアップすることができます。fortranwikiに良い例があります。

于 2011-10-24T13:13:09.783 に答える
10

INQUIREを使用して、使用されていないユニット番号を見つけることができます。

      integer*4 function get_file_unit (lu_max)
!
!   get_file_unit returns a unit number that is not in use
      integer*4 lu_max,  lu, m, iostat
      logical   opened
!
      m = lu_max  ;  if (m < 1) m = 97
      do lu = m,1,-1
         inquire (unit=lu, opened=opened, iostat=iostat)
         if (iostat.ne.0) cycle
         if (.not.opened) exit
      end do
!
      get_file_unit = lu
      return
      end function get_file_unit
于 2011-11-30T06:20:32.607 に答える