Записями (компонентами) неформатного файла прямого доступа могут быть массивы

Пусть в файле хранятся два целочисленных массива по 5 элементов каждый.Напишем процедуру создания файла, в котором хранятся массивы из определенного количества элементов, а также процедуру просмотра этого файла.

Program main

implicit none

integer, parameter:: narr=2, n=5!количество массивов

Call create_dir (narr, n)

print*,'isx fil'

Call view_dir(n)

End

Subroutine create_dir(narr, n)

implicit none

integer, intent(in):: narr, n!количество массивов

integer i

real x(n)

open (30, file= 'mas_dir.txt', access= 'direct', form='unformatted', recl=sizeof (x), err=21)

do i=1, narr

print*,'введи’, i, ‘ –ый массив'

read *, x!чтение массива с клавиатуры

write(30, rec=i, err=22) x!запись массива в файл

Enddo

print*, 'zapis ok'

close(30)

return

21 print*, 'ochibka open dir'

stop

22 print*, 'oshibka write'

stop

End subroutine

Subroutine view_dir (n)

implicit none

integer i

real x (n)

i=0

open (60, file='mas_dir.txt', access='direct', form='unformatted', recl=sizeof (x), err=21)

print*,'fail dir'

do while (.not. eof (60))

i=i+1

read(60, rec=i) x!чтение массива из файла

print*,i, ' massiv'

print '(f4.0, 2x\)', x!вывод массива на экран

Enddo

close(60)

return

21 print*, 'ochibka open'

stop

End subroutine

Добавление записи в файл прямого доступа.

Добавление может быть выполнено просто, если мы знаем количество записей в файле прямого доступа. Для этого, используя инструкцию Find(num_f rec=num_r) установить указатель на новую запись, и записать требуемое значение Write (num_f, rec=num_r)<значение> или просто
Write (num_f, rec=num_r) <значение>

Когда количество записей в файле неизвестно, можно предложить следующую последовательность действий: сначала прочитать и сосчитать все записи в файле, а затем дописать новую запись вслед за последней записью.

А можно для определения количества записей в файле прямого доступа использовать специальную функцию FSEEK(unit, offset, from), которая находится в библиотечном файле dfport. Чтобы воспользоваться этой функцией надо в свою программу подключить библиотеку: use dfport.

Функция имеет следующий синтаксис:

FSEEK(unit, offset, from)

Unit – номер устройства

Offset – отступ от текущего указателя

From – позиция куда установить:
seek_set –начало
seek_cur – текущая позиция
seek_end – конец файла

Дальше воспользоваться оператором inquire (num_f,nextrec=nr ), со спецификатором nextrec, где будет находиться номер последней записи в файле.

!функция, определяющая количество записей в файле прямого доступа


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



double arrow