Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К1_Допматериалы(02дек12).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
3.2 Mб
Скачать

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

Типизированный (компонентный) файл содержит набор данных одного типа.

  • ОБЪЯВЛЕНИЕ В ПРОГРАММЕ

Var

f:File of <тип_компонента>

  • <тип_компонента> может быть простым или структурированным, предопределенным или определяемым пользователем, но компоненты файла не могут содержать другие файлы или объекты.

  • Содержимое файла можно рассматривать как непрерывную последовательность записей ранее объявленного типа (<тип_компонента>). Разделители между записями отсутствуют, все записи файла имеют одинаковую длину, равную SizeOf(<тип_компонента>) байт.

  • Данные в файле хранятся в том же виде, что и в памяти ЭВМ (машинное представление данных).

  • ПРИМЕР 1. ДОПУСТИМЫЕ ОБЪЯВЛЕНИЯ ТИПИЗИРОВАННЫХ ФАЙЛОВ

Type (a)

Arr2X2X2= Array[1..2,1..2,1..2] of integer;

Person=record

Name:String[20];

Age:Byte;

End;

Var

Fi: File of Integer; {Размер записи= 4 (2) байта}

Fc:File of Char; {Размер записи= 1 байт}

Fs:File of String[20]; {Размер записи= 21 байт}

F_Arr: File of Arr2X2X2; {Размер записи= 32 (16) байт}

Fp:File of Person; {Размер записи= 22 байта}

Type (b)

Exam=record

Subject:String[10];

Mark:1..5;

End;

Stud_Marks=Record

StudName:String[20];

ExamsMark:Array[1..5] of Exam;

End;

Var

FSM:File of Stud_Marks; {Размер записи:21+5*(11+1)=81 байт}

Student: Stud_Marks;

  • ОТКРЫТИЕ ТИПИЗИРОВАННЫХ ФАЙЛОВ

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

  • Переменная FileMode (тип Byte, модуль System) позволяет задавать режим доступа к данным типизированных и нетипизированных файлов, открытых с помощью процедуры Reset: 0 (режим "только чтение"), 1 (режим "только запись"), 2 (по умолчанию, режим "чтение и запись").

  • Файлы, открытые с помощью Rewrite, всегда открываются в режиме "чтение/запись".

  • ЧТЕНИЕ/ЗАПИСЬ ДАННЫХ

Для чтения/записи данных типизированного файла используются процедуры

Read(F, V1[, V2,…Vn])

Write(F, V1[, V2,…Vn]),

где F - файловая переменная, а V1,…Vn - переменные того же типа, что и <тип_компонента>, указываемый при объявлении файловой переменной F.

  • Так, для открытого файла FSM (пример 1b) допустимы операторы Read(FSM,Student) или Write(FSM,Student), а операторы Readln(FSM, Student), Read(FSM, Student.StudName), Write(FSM, Student.ExamsMark[1].Subject) и т.п. недопустимы.

  • ОТЛИЧИЯ ТЕКСТОВЫХ ФАЙЛОВ ОТ ТИПИЗИРОВАННЫХ

  1. Пусть задан текстовый файл (Text/TextFile):

Я#13#10

изучаю#13#10

информатику#13#10

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

  1. Данный текстовый файл можно также рассмотреть как типизированный (File of Char).

|Я|#13|#10|и|з|у|ч|а|ю|#13|#10|и|н|ф|о|р|м|а|т|и|к|у|#13|#10|

Cодержимое файла представляется в виде набора символов (тип Char), допустим лишь посимвольный ввод/вывод, а в программе нельзя будет использовать подпрограммы, предназначенные только для текстовых файлов (Readln, Writeln, Append, Eoln и т.п.).

  1. Аналогичные ограничения будут действовать, если сохранить соответствующие строки текстового файла в типизированном файле, объявленном как File of String[255].

Этот файл будет содержать набор строк и допустимым будет «построчный» ввод/вывод.

Размер такого файла будет равен 256*3=768 байт, а его структура изменится:

#1Я

не используется

#6изучаю

не используется

#11информатику

не используется

2

256-2

7

256-7

12

256-12

  • Примечание. В отличие от среды Borland|Free Pascal, в Delphi объявление типизированного файла в виде File of String не допускается (связано с реализацией этого строкового типа в данной среде). Вместо этого используйте типы ShortString/String[n].

  1. В типизированном файле возможен как последовательный, так и прямой доступ к данным (см. далее), а в текстовом – только последовательный.