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)

但这已经足够新了,并不是所有的编译器都支持它。如果你还没有,你可以自己模拟一个;fortran wiki上有一个很好的例子。

于 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 回答