use dfport! подключение библиотеки
integer, intent(in):: num
integer nr, res
logical tf
inquire (num, opened=tf)!определяет открыт ли файл
If (.not. tf) then
numlastrec =0
print*,'файл не подсоединен к устройству'
stop
endif
res=FSEEK(num, 0, Seek_end)
inquire (num, nextrec=nr )! возвращает ном. посл. зап.
numlastrec=nr
End
Program main
!Добавление записи в файл прямого доступа
implicit none
integer nr, x, i
integer NumLastRec
open(10, file='out3.dat', form='unformatted', access='direct', recl=sizeof(x))
x=100
write(10, rec=4) x
write(10, rec=2)50
print*,'isx fil'!исходный файл
find(10, rec=1)! установка файла на начало
i=1
Do while(.not. eof (10))
read(10, rec=i)x
print*,x
i=i+1
Enddo
nr=NumLastRec(10)
print*, 'nr=', nr! вывод на экран номера последней записи в файле
nr=nr+1! формирование номера новой записи
write(10, rec=nr) 500! запись нового значения 500 в конец файла
find(10, rec=1)! переход на начало файла
print*,'файл после добавления'
i=1
do while(.not.eof(10))
read(10,rec=i)x
print*,x
i=i+1
enddo
close(10)
end
Удаление записи из файла прямого доступа
Удаление записи из файла прямого доступа может быть выполнено с использованием оператора Delete.
Этот оператор используется для файлов прямого доступа. Удаляет запись с заданным номером. Оператор логически удаляет заданную запись из файла, помечая ее как удаленную (физически не удаляется: проставляется 0 на месте удаленной). При удалении записи, если не было ошибки, указатель автоматически устанавливается на следующую запись. Если номер записи не указан, то удаляется текущая запись.
|
|
Delete ([unit=]<номер устройства>,
[rec=<целочисленное выражение>]
[,err=<метка>]
[,iostat=<целочисленная переменная>])
Однако эти действия не приводят к физическому удалению записи в файле. Поэтому, для удаления какой-либо записи из файла, как и в файле последовательного доступа, используется вспомогательный (временный) файл.
Удаление записей из неформатного файла последовательного доступа.
Пример
В неформатном файле последовательного доступа хранятся вещественные числа. Удалить из файла все отрицательные числа.
Subroutine create_sq(n)
implicit none
integer,intent(in)::n
integer i
real x
open (50, file='isxseq.txt', access= 'sequential', form='unformatted', status='new')
do i=1,n
print*,'bb cislo'
read *,x
write(50)x
enddo
close(50)
End subroutine
Subroutine view_sq()
implicit none
real x
open (10, file='isxseq.txt', form='unformatted', status='old')
print*,'fail sq'
do while (.not.eof (10))
read(10) x
print '(f3.0,2x\)', x
enddo
close(10)
!11 print*,'ochibka open'
End subroutine