Ho bisogno di sviluppare una libreria che apra un file e analizzi le cose. Il numero di unità, a causa dello stile IO fortran, deve essere deciso da me, ma non posso sapere quali altre unità sono aperte nel codice client. Esiste una funzione standard come give_me_any_unit_number_that_is_free()
?ottenere il numero di unità gratuito in fortran
9
A
risposta
26
in Fortran 2008, c'è una clausola newunit per aprire che è possibile utilizzare
integer :: myunit
..
open(newunit=myunit,file='file.dat')
...
close(myunit)
ma questo è abbastanza nuovo che non tutti i compilatori supportano ancora. Se il tuo non lo è ancora, puoi prenderne uno su te stesso; c'è un buon esempio su fortran wiki.
10
È possibile utilizzare INQUIRE per trovare un numero di unità che non è in uso:
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