implicit none
integer x, y, z, i, n
open(10,file='a.txt',form='unformatted',access='direct',recl=4,status='new')
y = 15
write(10, rec=2)88!записали в файл на 2 место - 88
write(10, rec=5)y!записали в файл на 5 место – значение y
write(10, rec=5)111!заменили в файле 15 на 111
do I = 1, 5
read(10, rec=i) x
print*, x!вывод файла на экран (5 записей)
enddo
read(10, rec=4) y!прочитали 4 –ую запись
print*, y! вывели ее на экран
! Добавим в файл запись.
write(10, rec =6) 20!записали на 6 место - 20
!установили указатель на 1-ую запись
find(10, rec=1)
print*, ' полученный файл '
i=0!счетчик записей
do while (.not. eof (10))
i=i+1!формируем номер записи
read(10, rec= i) z!считываем очередную запись
print*, z
enddo
close(10)
end
Получили: 0 88 0 0 111 20 (на месте не введенных компонент - 0)
Создание и просмотр неформатных файлов последовательного и прямого доступа осуществляется только программным путем.
Для создания и просмотра неформатных файлов прямого доступа напишем отдельную программу. Для этого лучше создать отдельный проект. В дальнейших задачах будем использовать эти процедуры, подключая их в свой проект.
Еще один вариант использования оператора inquire:
Для контроля открытия файла можно использовать следующую последовательность операторов:
logical tf
inquire(filenum, opened=tf)
if (.not. tf)then
print*,'file not opened'
stop
endif
Opened – логическая переменная, которая возвращает значение TRUE при опросе файла, если файл присоединен к устройству и FALSE в противном случае.
Процедуры создания и просмотра неформатных файлов прямого доступа можно поместить в модул ь и подключать модуль в свой проект при необходимости или поместить в файлах отдельно.
Модуль, в котором помещены процедуры создания и просмотра неформатных файлов прямого доступа:
Module in_out_fil
contains
!создание неформатного файла прямого доступа
Subroutine create_dir(n)
implicit none
integer,intent(in)::n
integer i
real x
open (30, file='new_dir.txt', access= 'direct', form='unformatted', recl=4, status='new', err=21)
do i=1, n
print*,'bb cislo'
read *, x
write(30, rec=i, err=22) x! rec=i
enddo
print*, 'zapis ok'
close(30)
return
21 print*,'ochibka open dir'
stop
22 print*,'oshibka write'
End subroutine
!Процедура просмотра неформатного файла прямого доступа
Subroutine view_dir()
implicit none
integer i
real x
i=0
open (60, file='new_dir.txt', access='direct', form='unformatted', recl=4, status='old', err=21)
print*,'исходный файл'
do while (.not. eof (60))
i=i+1
read (60, rec = i) x! rec=i- обязательно
print '(F4.0, 2x\)', x!вывод на экран
enddo
close(60)
return
21 print*,'ochibka open'
stop
End subroutine
End module
Пример