2011-10-24 23 views
9

Necesito desarrollar una biblioteca que abra un archivo y lo analice. El número de unidad, debido al estilo de IO fortran, debe ser decidido por mí, pero no puedo saber qué otras unidades están abiertas en el código del cliente. ¿Hay una función estándar como give_me_any_unit_number_that_is_free()?obteniendo el número de unidad gratis en fortran

Respuesta

26

en Fortran 2008, hay una cláusula para abrir newunit que puede utilizar

integer :: myunit 

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

pero eso es lo suficientemente nueva que no todos los compiladores soportan todavía. Si el tuyo aún no, puedes burlarte de uno tú mismo; hay un buen ejemplo en el fortran wiki.

10

Puede utilizar INQUIRE para encontrar un número de unidad que no esté en 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 
Cuestiones relacionadas