2011-10-24 9 views
9

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

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