Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИТ / М 3 Офісні програмні системи / Файлы ПЗ-08 / Неформатированный текст

.doc
Скачиваний:
44
Добавлен:
19.02.2016
Размер:
37.89 Кб
Скачать

10. Файлы

10.1. Основы работы с файлами

10.1.1. Физические файлы и файловые переменные

Под файлом обычно понимают именованную область на внешнем носителе информации.

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

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

Типизированный файл — это последовательность переменных некоторого скалярного или структурного (но не файлового) типа. Тип задается выражением вида file of тип. Вот примеры.

type flchar = file of char;

type Student = record

Name: String;

Number: Integer;

end;

flStud = file of Student;

var Fi, Fo: flStud;

FF: flchar;

Примечание.

Текст обычно понимается как последовательность символов, разбитая на строки. В языке Паскаль для файлов-текстов определен специальный тип с именем text.

Элементами текста являются символы, однако тип text отличается от типа file of char. В текстах есть специальные символы, которые задают концы строк и конец текста. Тексты обрабатываются с помощью специальных подпрограмм, неприменимых к типизированным файлам, например, readln и writeln.

Бестиповые файлы рассматриваются как последовательности байтов и определяются с помощью служебного слова file. Например,

var Fi, Fo: file;

Для них также определены специфические подпрограммы.

Элементы массивов и записей могут иметь файловые типы. Например, допустимы следующие определения типов.

type Arrfil = array [1..2] of file of Student;

type Rcrfil = record

data: text;

temp: char

end;

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

Практически у всех подпрограмм первым параметром является имя файловой переменной. Пусть далее имя f обозначает файловую переменную (хотя в реальных программах лучше давать файловым переменным содержательные имена, например, workfile, inputfile и т.п.).

Работа с файловой переменной начинается со связывания ее с конкретным физическим файлом. Для этого идентификатор файловой переменной и имя физического файла в операционной системе, или внешнее имя, задаются в вызове процедуры assign, например, assign(f, 'myfile.dat'). Второй аргумент, т.е. внешнее имя — это выражение строчного типа. Например, если строки sl и s2 имеют значения 'c:\mydir\book' и 'txt', то assign(f, sl+'.'+s2) связывает файловую переменную f с файлом c:\mydir\book.txt. После вызова процедуры assign физический файл можно обозначать именем файловой переменной.

Если нужно связать f с файлом, внешнее имя которого "default.dat", достаточно нажать на клавишу <Entet>. Для другого связывания нужно набрать на клавиатуре внешнее имя, например, "newname.dat", и нажать <Enter>.

Имена input и output можно не записывать в вызовах подпрограмм обработки файлов. Именно так вызовы readln и writeln выглядели в предыдущих главах.

Работать с элементами связанного файла можно только после его открытия. Оно задается процедурами, которые рассматриваются ниже. Однако сейчас опишем закрытие файла с помощью процедуры close. Ee вызов имеет такой вид.

close(f);

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

Попытка закрыть уже закрытую или еще не открытую файловую переменную приводит к аварийному завершению программы.

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

связывание

открытие

обработка

закрытие

новое открытие или связывание и открытие

обработка

закрытие

и т.д.

10.1.2. Последовательная запись в типизированные файлы

Файл, предназначенный для записи, следует открыть с помошью процедуры rewrite. После вызова ReWrite(f) значение f можно представить как (<>, 0, W), т.е. независимо от предыдущего состояния f последовательность в файле становится пустой (см. рис. 10.2, б).

Примечание

Эта процедура вызывается для создания нового физического файла или обновления старого с уничтожением предыдущих данных. После ее выполнения файл называется установленным в начальное состояние для записи.

Запись в файл задается процедурой write. При выполнении ее вызова

write(f, выражение_типа_компонентов_файла);

значение выражения вычисляется и присваивается доступному элементу файла, после чего указатель доступного элемента сдвигается на 1 элемент. Например, рассмотрим следующую программу.

program ...

var f: file of integer;

x: integer;

begin

rewrite(f); x:=2;

write(f, 1); write(f, x); write(f, x*x);

end.

В вызове write допустимо произвольное число аргументов соответствующего типа:

write(f, выражение_1, ... , выражение_n);

Такой вызов выполняется на самом деле как последовательность

write(f, выражение_1); ... ; write(f, выражение_n);

К типизированным файлам неприменима процедура writeln. Она определена только для текстов.

Соседние файлы в папке Файлы ПЗ-08