Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика - лекции.doc
Скачиваний:
18
Добавлен:
07.11.2018
Размер:
512.51 Кб
Скачать

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

Длина любого компонента типизированного файла строго постоянна, что дает воз­можность организовать прямой доступ к каждому из них (т.е. доступ к компоненту по его порядковому номеру).

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

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

READ (файловая переменная, список ввода)

Файловая переменная файловая переменная должна быть объявлена предложением FILE OF... и связана с именем файла процедурой ASSIGN. Файл необходимо открыть процедурой RESET. Если файл исчерпан, обращение к READ вызовет ошибку ввода-вывода.

Процедура WRITE. Используется для записи данных в типизированный файл. Формат обращения:

WRITE (файловая переменная, список вывода)

Процедура SEEK. Смещает указатель файла к требуемому компоненту. Формат обращения:

SEEK (файловая переменная,N компонента)

Здесь <N компонента> - выражение типа LONGINT, указывающее номер компо­нента файла.

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

Функция FILESIZE. Возвращает значение типа LONGINT, которое содержит ко­личество компонентов файла. Формат обращения:

FILESIZE (файловая переменная)

Чтобы переместить указа­тель в конец типизированного файла, можно написать:

seek (FileVar, FileSize(FileVar));

где FILEVAR - файловая переменная.

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

FILEPOS (файловая переменная)

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

Нетипизированные файлы объявляются как файловые переменные типа FILE и от­личаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы, с одной стороны, совместимыми с любыми другими файлами, а с другой -позволяет организовать высокоскоростной обмен данными между диском и памятью.

При инициации нетипизированного файла процедурами RESET или REWRITE можно указать длину записи нетипизированного файла в байтах. Например, так:

var

f: file;

begin

assign(f,'myfile.daf) ;

reset (f,512) ;

end.

Длина записи нетипизированного файла указывается вторым параметром при об­ращении к процедурам RESET или REWRITE, в качестве которого может использо­ваться выражение типа WORD. Если длина записи не указана, она принимается равной 128 байтам.

Турбо Паскаль не накладывает каких-либо ограничений на длину записи нетипизи­рованного файла, за исключением требования положительности и ограничения макси­мальной длины 65535 байтами (емкость целого типа WORD).

При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением READ и WRITE, кото­рые заменяются соответственно высокоскоростными процедурами BLOCKREAD и BLOCKWRITE . Для вызова этих процедур используются следующие предложения:

BLOCKREAD (файловая переменная, буфер,D[,N])

BLOCKWRITE (файловая переменная,буфер,D[,N])

Здесь <буфер> - буфер: имя переменной, которая будет участвовать в обмене дан­ными с дисками;

<D> - количество записей, которые должны быть прочитаны или записаны за одно обращение к диску;

<N> - необязательный параметр, содержащий при выходе из процедуры количество фактически обработанных записей.

После завершения процедуры указатель смещается на <N> записей.

Процедура­ми SEEK. FILEPOS и FILESIZE можно обеспечить доступ к любой записи нетипизиро­ванного файла.