Вы также можете использовать файл прямого доступа, в котором записи могут быть записаны и прочитаны не по порядку. См. Например, http://en.wikipedia.org/wiki/Fortran_95_language_features#Direct-access_files
Изменить через один день:
Были предложены решения с использованием последовательного файла. Я не думаю, что это сработает ... пожалуйста, объясните, если вы знаете, как заставить это работать. (Конечно, вы можете отсортировать значения в памяти и записать их последовательно.) Вот пример кода для иллюстрации проблемы. Он создает файл из 10 строк, а затем предполагает, что вы хотите записать 5-е значение:
program test_rewind
integer :: i, j
open (unit=15, file="test_rewind.txt", access="sequential", form="formatted", action="readwrite" )
do i=1,10
write (15, '(I4)') i
end do
rewind (15)
do i=1,4
read (15, *) j
end do
write (15, '(I4)') 99
stop
end program test_rewind
Выходной файл содержит:
1
2
3
4
99
Проблема для последовательного файла заключается в том, что запись в существующий файл стирает все после этой точки.
Сравните с решением прямого доступа:
program test_rewind
integer :: i
open (unit=15, file="test_rewind.dat", access="direct", form="unformatted", action="readwrite", recl=4 )
do i=1,10
write (15, rec=i) i
end do
write (15, rec=5) 99
stop
end program test_rewind
Короче и работает - выходной файл содержит десять чисел с 5-м, измененным с 5 на 99. Однако они двоичные.