End subroutine

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


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



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