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
9
A
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