Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700269.doc
Скачиваний:
15
Добавлен:
01.05.2022
Размер:
1.78 Mб
Скачать

3.3.7. Файлы

Различают файлы трех видов: текстовые файлы, типизированные файлы и нетипизированные файлы.

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

var <имя файловой переменной>: TextFile;

Работа с текстовыми файлами осуществляется процедурами и функциями файлового ввода/вывода. Основные процедуры чтения – Read, ReadLn, Write и WriteLn.

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

var <имя файловой переменной>: file of <тип данных>;

var F: file of real; // пример

Процедуры чтения и записи Read и Write для типизиро­ванных файлов не отличаются от соответствующих процедур для текстовых файлов. Не определены процедуры Readln и Writeln, но есть процедура Seek, позволяющая перемещаться по файлу не только последовательно, как в текстовых файлах, а сразу переходить к требуемому элементу. Имеется также функция FilePos, возвращающая текущую позицию в файле.

Нетипизированные файлы – это двоичные файлы, которые могут содержать самые различные данные в виде последовательности байтов. Программист при чтении этих данных сам должен разбираться, какие байты к чему относятся. Тип файловой переменной нетипизированного файла объявляется следующим образом:

var <имя файловой переменной>: file;

Открытие нетипизированных файлов осуществляется процедурами Reset и Rewrite, синтаксис которых несколько отличен от аналогичных процедур для других видов файлов тем, что в этих процедурах указывается размер одной записи в байтах. Для записи и чтения данных в нетипизированных файлах имеются процедуры BlockRead и BlockWrite, которые читают или записывают указанное в них число записей.

3.3.8. Указательные типы

Указатель является величиной, указывающей на некоторый адрес в памяти, где хранятся какие-то данные. Указатели бывают типизированные, указывающие на данные определенного типа, и нетипизированные (типа pointer), которые могут указывать на данные произвольного типа. Используются указатели обычно для работы с объектами в динамически распределяемой области памяти, особенно при работе с записями.

Объявление указателя имеет вид:

type <имя типа указателя> = ^<тип данных>;

F1 = ^real; // типизированный указатель

F2 = pointer; // нетипизированный указатель

Предопределена операция @, возвращающая адрес своего операнда: переменной, функции, процедуры, метода. Иначе говоря, операция @ создает указатель на свой операнд. При этом если X – переменная, то @X возвращает адрес X, причем при директиве компилятора {$T–} (включена по умолчанию) тип результата pointer. В случае функции или процедуры с именем F – @F возвращает точку входа, причем тип результата всегда pointer. Также существует предопределенная константа nil, которая обычно присваивается указателям, которые в данный момент ни на что не указывают.

Чтобы получить доступ к данным, на которые указывает типизированный указатель, надо применить операцию его разыменования. Она записывается с помощью символа ^, помещаемого после указателя. Например, для того, чтобы по адресу объявленного типизированного указателя на тип real F1 находилось какое-либо число, необходим оператор вида F1^:=0.18;. Операция разыменовывания не применима к типу pointer. Для разыменовывания подобного указателя сначала необходимо привести его к другому типу.

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