Integer function NumLastRec( Num)

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


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



double arrow
Сейчас читают про: