Запись и чтение данных при работе с файлом происходит с той позиции, где находится файловый указатель. Любая операция ввода/вывода в файле перемещает указатель в начало следующей записи. Если количество записей при чтении неизвестно, то используется логическая функция eof(n), которая осуществляет контроль достижения конца файла. Функция возвращает .TRUE., если достигнут конец файла, и .FALSE. в противном случае. При попытке прочесть несуществующую запись возникает ошибка.
При необходимости дописать данные в файл последовательного доступа в операторе open указывается accsess = append.
Если файл последовательного доступа прочитан весь и есть необходимость продолжить его обработку, то используют оператор REWIND(<номер устройства>).
Если файл прямого доступа прочитан весь и есть необходимость продолжить его обработку, то используют оператор перехода на любую запись Find(<номер записи>).
Файлы последовательного доступа
Форматные файлы
Форматные файлы последовательного доступа называют еще текстовыми файлами. Текстовый файл содержит символьное представление данных всех типов. При работе с текстовыми файлами используется форматный или управляемый списком ввод/вывод. Записи текстового файла могут иметь разную длину. Одним оператором ввода может быть прочитано произвольное количество записей текстового файла. Текстовый файл может быть создан и просмотрен в любом редакторе, поддерживающим кодировку.
|
|
Пример
Создать форматный текстовый файл из 10 целых случайных чисел в диапазоне от -50 до 50 и для контроля вывести его содержимое на экран.
Для создания файла и чтения записанных данных напишем процедуры. Вообще-то для создания файла вручную и просмотра последовательного форматного файла не нужна программа.
Program main
implicit none
integer, parameter:: n=10, num=1
character(80) s
print *, 'bb. imj file'! ввели имя файла
read *, s
! открываем последовательный форматный файл
open(num, file=s, err=10, status='new')
! вызываем процедуру генерации сл.чисел и записи их в файл
call rnd_number (n, num)
rewind(num)!переходим на начало файла
call read_number(num)!выводим содержимое файла на экран
close(num)
stop
!oбработка ошибок
10 print *, 'oшибка записи'!переход в случае ошибки
End program
! Процедура заполнения текстового файла случайными числами
Subroutine rnd_number (n,num)
implicit none
integer, intent(in)::n,num
integer i, x
real rnd
call random_seed()!установка стартовой затравки
do i=1, n
call random_number (rnd )
x=rnd*100 - 50
write (num, *, err=200) x
Enddo
return! возврат в главную программу
!обработка ошибок
200 print *, 'ошибка записи'