Program main

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

Пример


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow