Модули, записи и файлы
онентов, называемых полями записи. В отличие от массива, компоненты
(поля) записи могут быть различного типа. Чтобы можно было ссылаться на тот
или иной компонент записи, поля именуются.
Структура обьявления типа записи такова:
<имя типа> = RECORD <пс. полей> END
Здесь <имя типа> - правельный индификатор;
RECORD, END – зарезервированные слова (запись, конец);
<сп. полей> - список полей; представляют собой последовательность
разделов записи, между которыми ставится точка с запитой.
Каждый раздел записи состоит из одного или нескольких индификаторов полей,
отделяемых друг от друга запятыми. За индификатором ставится двоеточие и
описание типа поля например:
type
birthday = record
day, month : byte;
year : word:
end;
var
a,b : Birthday;
. . . . . . . .
В этом примере тип Birthday есть запись с полями DAY, MONTH, и YEAR;
переменные А и В содержат записи типа Birthday.
Как в массиве, значения переменных типа записи можно присваивать другим
переменным того же типа, например:
a : = b;
К каждому из компонентов записи можно получить доступ, если использовать
составное имя, т.е. указать имя переменной, затем точку и имя поля:
a.day := 27; b.year := 1991;
Чтобы упростить доступ к полям записи, используется оператор присоединения
WITH:
WITH <переменная> DO <оператор>
Здесь WITH, DO – ключевые слова (с, делать);
<переменная> - имя переменной типа запись, за которым,
возможно, следует список вложенных полей;
<переменная> - любой оператор Турбо Паскаля.
Например:
with c.bd do month := 9;
Имена полей должны быть уникальными в пределах той записи, где они
обьявлены, однако, если записи содержат поля – записи, т.е. вложена одна в
другую, имена могут повторяться на разных уровнях вложенности.
.
Глава 7. Файлы.
Под файлом понимается именованная область памяти на магнитном носителе,
используемая для долговременного хранения некоторой логически связанной
информации. В эту область внешней памяти можно как поместить определенные
данные, так и извлечь их из нее. Эти действия имеют общее название - ввод-
вывод.
7.1. Операция с файлами как единое целое.
Программирование доступа к файлу в языке Turbo Pascal начинается с
описания файловой переменной (переменной файлового типа). Это описание
строится с помощью служебного слова file, после которого (после служебного
слова of) может быть указан тип отдельных элементов файла, например:
var
F : file of integer;
При необходимости можно отдельно определить некоторый файловый тип,
которым в дальнейшем пользоваться при описании файловых переменных:
type
RecordFile = file of record
А, В : real;
end;
var
Fl, F2 : RecordFile;
Очень важно различать собственно файл (область памяти на магнитном
носителе с некоторой информацией) и переменную файлового типа в некоторой
Turbo Pascal- программе. Считается, что файловая переменная является
представителем некоторого дискового файла в программе. Для того, чтобы
реализовать доступ к файлу па магнитном диске, программа должна связать его
с файловой переменной. Для этого необходимо сопоставить переменную с именем
файла. Это имя представляется в виде строки, содержащей полное имя файла и,
быть может, цепочку объемлющих каталогов и обозначение дисковода. Такая
строка носит название маршрута (или пути) к файлу и формируется по общим
правилам MS-DOS.
Связывание маршрута и файловой переменной производится стандартной
процедурой Assign, которой передаются два параметра: имя переменной
файлового типа и строка с именем (маршрутом) дискового файла, например:
Assign (F, 'с: booksbook4test3 .раз ' ) ;
Помимо маршрута, во втором параметре может быть указано условное
(символическое) обозначение некоторого «псевдофайла» MS-DOS, то есть файла,
связанного с конкретным физическим устройством. Допускаются имена, в
основном совпадающие с принятыми в MS-DOS обозначениями (‘con’ – консоль,
то есть экран дисплея и/или клавиатура, ‘lpti’ или ‘prn’ – печатающее
устройство и т. д.).
До тех пор, пока файловая переменная не связана с каким-либо дисковым
файлом, никакие операции с ней в программе невозможны, Заметим, что можно
связать файловую переменную с еще не существующим дисковым файлом. Это
может быть оправдано для случая последующего создания Turbo Pascal-
программой файла с данным именем с помощью некоторой системной процедуры.
После того, как файловая переменная с помощью процедуры Assign связана с
конкретным дисковым файлом, можно выполнить любую допустимую операцию с
ним. Здесь рассмотрим две операции общего характера, позволяющие
переименовывать и уничтожать существующие дисковые файлы. Такие операции
выполняются системными подпрограммами Rename и Erase со следующими
спецификациями:
Rename ( var f; nevname : string );
Erase ( var f );
Основным параметром этих процедур является файловая переменная (она
может идентифицировать файл любого типа, и к ней должна была быть ранее
применена процедура Assign), а процедуре Rename дополнительно передается
новое имя файла. Действие указанных процедур основывается на
соответствующих DOS-функциях и функционально эквивалентно командам ren и
del командного процессора.
7.2. Структура файлов
7.2.1Открытие и закрытие файлов
В этом и следующем разделах рассматриваются файлы традиционной для языка
Pascal структуры, которые описываются в программе в терминах составляющих
компонент. Кроме таких файловых переменных (они также называются
"типизированными" файлами), в языке Turbo Pascal имеются также файлы
специального типа - текстовые файлы, которые введены для поддержки одного
практически важного частного случая файловых структур, и нетипизированные
файлы, которые используются для более эффективной организации обменов на
низком уровне.
Важнейшим моментом при использовании переменных файловых типов является
интерпретация файла как потенциально бесконечного списка значений одного и
того же (базового) типа. Например, описание переменной F вида
var
F : file of integer;
понимается как определение в программе под именем F списка неопределенного
количества целых чисел, расположенного на некотором внешнем запоминающем
устройстве (например, на магнитном диске).
С каждой переменной файлового типа также связано понятие текущего
указателя файла. Текущий указатель можно понимать как скрытую переменную
(то есть переменную, неявно описанную вместе с файловой
переменной), которая обозначает ("указывает" на) некоторый конкретный
элемент файла. Таким образом, можно графически так представить
интерпретацию файла, связанного с переменной F: 0 1 2
N
|Целое|Целое|Целое|. . .|Целое|. . . |
| | | |. . | | |
Текущий указатель —————
Как правило, все действия с файлом (чтение из файла, запись в файл)
производятся поэлементно, причем в этих действиях участвует тот элемент
файла, который обозначается текущим указателем. В результате совершения
операций текущий указатель может перемещаться, настраиваясь на тот или иной
элемент файла. Все элементы файла считаются пронумерованными; начальный
элемент имеет нулевой номер. Имеется возможность явной установки текущего
указателя на некоторый элемент файла.
Заметим, что один и тот же внешний файл в различных Turbo Pascal-
программах (или даже в различных частях одной и той же программы) может
интерпретироваться по-разному, например, как последовательность целых
чисел, или как последовательность символов, или как последовательность
некоторых записей, и т. д. Эта возможность очень важна и часто используется
в работе с файлами сложной структуры. Например, в процессе работы с
внутренним представлением файлов баз данных (в частности, с DBF-файлами)
может понадобиться интерпретировать файл по-разному в зависимости от того,
какую его компоненту (заголовок или содержательную часть) мы обрабатываем.
Нужно также отметить, что все операции с файлами в языке Turbo Pascal
реализованы с использованием базовых средств операционной системы; в
частности, понятие текущего указателя файла поддержано в MS-DOS. Однако все
перемещения по файлу (как явное управление указателем, так и сдвиги при
обменах) выполняются в терминах байтов. Таким образом, все аспекты,
связанные с типизацией содержимого файлов, представляют собой системную
надстройку языка Turbo Pascal.
Для выполнения некоторой операции по вводу-выводу необходимо прежде всего
открыть дисковый файл (напомним, что предварительно нужно связать файловую
переменную с дисковым файлом с помощью процедуры Assign). Под открытием в
данном случае понимается подготовка к обмену с файлом со стороны программы,
заключающаяся прежде всего в поиске файла на внешнем носителе, установке
его текущего указателя на определенный (как правило, нулевой элемент) и
формировании буфера в оперативной памяти, посредством которого будут
производиться обмены.
Обычные типизированные файлы открываются с помощью одной из двух
| | скачать работу |
Модули, записи и файлы |