Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 3_3.doc
Скачиваний:
33
Добавлен:
13.03.2016
Размер:
158.72 Кб
Скачать

Файлы последовательного доступа

Форматные или текстовые файлы используются для работы с данными любых типов, представленных в символьной форме. Файлы, связанные с клавиатурой и монитором, всегда имеют текстовый формат и последовательный доступ. Файлы на устройствах внешней памяти могут иметь любой из названных выше форматов и любой тип доступа.

Информация в текстовом файле на внешнем носителе может просматриваться и редактироваться с помощью текстового редактора. Текстовый файл может создаваться как программным путем, так и с помощью текстового редактора.

При работе с текстовыми файлами используется форматный или управляемый списком ввод-вывод. При вводе данные из символьной формы преобразуются в форму внутреннего представления соответствующего типа, при выводе происходит обратное преобразование: из внутренней в символьную. Все правила преобразования описаны в разделе 3.9 применительно к вводу с клавиатуры и выводу на экран. Для файлов, связанных с устройствами внешней памяти, они те же самые.

Записи в текстовом файле отделяются друг от друга неотображаемыми символами CHAR(13) – возврат каретки и CHAR(10) – новая строка. При выводе на экран или на печать каждая запись выделяется в отдельную строку. В файле последовательного доступа разные записи могут иметь различную длину.

Оператор чтения из текстового файла имеет вид

READ (N|*, fmt|*) список ввода

Здесь N – номер устройства, с которым связан файл. Звездочка на месте номера устройства означает ввод с клавиатуры. fmt – список дескрипторов формата или метка оператора FORMAT (подробно см. раздел 3.9). Звездочка вместо fmt обозначает ввод, управляемый списком ввода.

Оператор вывода в текстовый файл:

WRITE(N|*, fmt|*) список вывода

В последовательном файле после выполнения оператора WRITE выставляется код конца файла. Поэтому для последующего чтения из файла нужно либо выполнить оператор REWIND (возврат на начало) либо BACKSPASE (возврат на одну запись назад).

В операторах READ и WRITE можно употреблять опцию IOSTAT=целая_переменная, позволяющую фиксировать ошибки при выполнении оператора (см. эту опцию для оператора OPEN)

Пример 2. Далее приведена программа работы с текстовым файлом последовательного доступа.

integer(2):: ia, ib, d(4)=(/1,2,3,4/)

real(4) a,b

character(3) ca

1 FORMAT(6F7.2)

2 FORMAT(8I5)

3 FORMAT(7A4)

open(1,file=’a.txt’)!открыт последовательный текстовый !файл

write(1,1)1.1, 2.2 ! 1 запись:^^^1.10^^^2.20

write(1,2)d ! 2 запись:^^^^^^^1^^^^^^^2^^^^^^^3^^^^^^^4

write(1,3) `a`, `bc`, `def` ! 3-я запись:^^^^a^^^bc^^def

rewind 1 !переход на первую запись

read(1,1) a, b !чтение 1-й записи: a=1.1 b=2.2

read(1,2) ia, ia, ia !чтение из 2-й записи: ia=3

read(1,3) ca, ca ! чтение из 3-й записи: ca=`bc`

backspace 1 !переход к 3-й записи

backspace 1 !переход к 2-й записи

read(1,2) ib, ib !чтение из 2-й записи: ib=2

write(*,*) a, ia, ca, ib !вывод на экран: 1.1 3 bc 2

rewind 1 !переход к 1-й записи

read(1,*) !переход ко 2-й записи

write(1,3) `ghij` !переписывание 2-й записи: `ghij`

end

В результате выполнения программы в файле a.txt останутся 2 записи:

^^^1.10^^^2.20

ghij

Двоичные файлы последовательного доступа. При записи в двоичный файл происходит копирование содержимого ячеек оперативной памяти. При чтении из двоичного файла данные без изменения своей формы передаются в ячейки оперативной памяти. Записью в двоичном файле считается каждый байт. Поэтому выполнение оператора BACKSPACE приводит к перемещению файлового указателя на один байт назад. Оператор чтения из двоичного файла имеет вид

READ(N) список_ввода

При этом ФУ перемещается на количество байт, равных длине списка ввода. Оператор вывода в двоичный файл: WRITE(N) список_ вывода. ФУ перемещается на длину списка вывода и записывается код конца файла.

Неформатные файлы последовательного доступа. Как и в двоичных файлах, передача данных происходит без преобразования формы представления. Отличие от двоичных файлов состоит в том, что записью выступает совокупность данных, вводимых в файл в результате выполнения оператора WRITE. После каждой записи выставляется специальный код конца записи. В файле последовательного доступа записи могут иметь разную длину.