Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 2).doc
Скачиваний:
96
Добавлен:
15.04.2015
Размер:
2.24 Mб
Скачать

Нетипизированные файлы

Нетипизированные файлы предназначены для хранения участков оперативной памяти на внешних носителях. После описания файловой переменной

var имя : file:

ее требуется связать с физическим файлом с помощью процедуры assign. Чтение и запись производится через буфер «порциями», равными размеру буфера. Раз­мер буфера, отличающийся от стандартного (128 байт), можно задать с помощью второго параметра процедур reset и rewrite при открытии файла.

reset(var f : file; bufsize : word)

rewrite(var f : file; bufsize : word)

Размер буфера должен находиться в пределах от 1 байта до 64 Кбайт.

Собственно чтение и запись выполняются с помощью процедур blockread и blockwrite.

blockread(var f : file; var x; count : word; var num : word);

blockwrite(var f : file; var x; count : word; var num : word);

Процедура blockread считывает в переменную х количество блоков count. Длина блока равна размеру буфера. Значение count должно быть больше или равно 1, за одно обращение нельзя ввести больше 64 Кбайт. Поскольку при вводе никаких преобразований данных не выполняется, имеет значение только адрес начала об­ласти памяти и ее длина, поэтому тип переменной х не указывается.

Необязательный параметр num возвращает количество прочитанных блоков. В слу­чае успешного завершения операции чтения оно равно запрошенному, в случае аварийной ситуации параметр num будет содержать число успешно прочитанных блоков. Следовательно, с помощью параметра num можно контролировать пра­вильность выполнения операции чтения.

Процедура blockwrite записывает в файл количество блоков, равное count, начи­ная с адреса, заданного переменной х. Длина блока равна длине буфера. Необя­зательный параметр num возвращает число успешно записанных блоков (неудача может произойти, например, из-за переполнения или сбоя диска).

Для нетипизированных файлов применяется как последовательный, так и прямой дос­туп.

Типизированные файлы

Типизированные файлы применяются для хранения однотипных элементов в их внутренней форме представления. Тип компонент задается после ключевых слов file of.

var

имя : file of тип_компонент;

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

За одну операцию записывается или считывается столько компонент, сколько перечислено в

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

Прямой доступ

При последовательном доступе чтение или запись очередного элемента файла возможны только после аналогичной операции с предыдущим элементом. На­пример, чтобы получить n-й элемент файла, требуется считать n-1 элементов. Типизированные файлы, так же как и нетипизированные файлы состоят из блоков одинакового размера. В нетипизированном файле размер блока равен длине буфера, а в компонентном – длине компоненты. Это позволяет применить к таким файлам прямой доступ, при котором операции выполняются с заданным блоком. Прямой доступ при­меняется только для физических файлов, расположенных на дисках.

С помощью стандартной процедуры seek производится установка текущей пози­ции в файле на начало заданного блока, и следующая операция чтения-записи выполняется, начиная с этой позиции. Первый блок файла имеет номер 0.

Процедуры и функции для для реали­зации прямого доступа

filepos(var f) : longint

Функция возвращает текущую позицию в файле f. Для только что открытого файла текущей позицией будет 0. После чтения или записи первого блока теку­щая позиция станет равной 1. После прочтения последней записи функция возвратит количество блоков в файле.

filesize(var f) : longint

Функция возвращает количество блоков в открытом файле f.

seek(var f; n: longint)

Процедура выполняет установку текущей позиции в файле (позиционирование). В параметре п задается номер блока, к которому будет выполняться обращение. Блоки нумеруются с нуля. Например, чтобы работать с четвертым блоком, необхо­димо задать значение п, равное 3. Процедура seek работает с открытыми файлами.

truncate(var f)

Процедура устанавливает в текущей позиции признак конца файла и удаляет все последующие блоки.

Соседние файлы в папке WORD