2011-10-24 27 views
9

Tôi cần phát triển thư viện mở tệp và phân tích cú pháp nội dung. Số đơn vị, do fortran IO phong cách, phải được quyết định bởi tôi, nhưng tôi không thể biết những gì các đơn vị khác được mở trong mã khách hàng. Có chức năng chuẩn như give_me_any_unit_number_that_is_free() không?nhận số đơn vị miễn phí trong fortran

Trả lời

26

Trong fortran năm 2008, có một điều khoản newunit để mở mà bạn có thể sử dụng

integer :: myunit 

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

nhưng đó là đủ mới mà không phải tất cả các trình biên dịch hỗ trợ nó được nêu ra. Nếu bạn chưa có, bạn có thể giả lập một mình; có một ví dụ tốt trên fortran wiki.

10

Bạn có thể sử dụng Yêu cầu để tìm một số đơn vị đó không được sử dụng:

 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