Пусть в файле хранятся два целочисленных массива по 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, где будет находиться номер последней записи в файле.
!функция, определяющая количество записей в файле прямого доступа