Шаг 41.
Структурированные типы. Тип "файл"

    На этом шаге мы рассмотрим использование типа "файл".

    У понятия файл есть две стороны. С одной стороны, файл - это именованная область внешней памяти, содержащая какую-либо информацию. Файл в таком понимании называют физическим файлом, то есть существующим физически на некотором материальном носителе информации.

    С другой стороны, файл - это одна из многих структур данных, используемых в программировании. Файл в таком понимании называют логическим файлом, то есть существующим только в нашем логическом представлении при написании программы. В программах логические файлы представляются файловыми переменными определенного типа.

    Структура физического файла представляет собой простую последовательность байт памяти носителя информации.


Рис.1. Структура файла

    Cтруктура логического файла - это способ восприятия файла в программе. Образно говоря, это "шаблон" ("окно"), через которое мы смотрим на структуру физического файла. В языках программирования таким "шаблонам" соответствуют типы данных, допустимые в качестве компонент файлов. Образное представление некоторых из "шаблонов" языка Object Pascal показано на следующих рисунках:


Рис.2. Представление некоторых файлов

    Структура логического файла в принципе очень похожа на структуру массива. Различия между массивом и файлом заключаются в следующем.

    У массива количество элементов фиксируется в момент распределения памяти, и он целиком располагается в оперативной памяти. Нумерация элементов массива выполняется соответственно нижней и верхней границам, указанным при его объявлении.

    У файла количество элементов в процессе работы программы может изменяться, и он располагается на внешних носителях информации. Нумерация элементов файла выполняется слева направо, начиная от нуля (кроме текстовых файлов). Количество элементов файла в каждый момент времени не известно. Зато известно, что в конце файла располагается специальный символ конца файла Eof, в качестве которого используется управляющий символ с кодом 26 (Ctrl+Z). Кроме того, определить длину файла и выполнить другие часто требуемые операции можно с помощью стандартных процедур и функций, предназначенных для работы с файлами.

    Особый вид файлов представляют собой текстовые файлы, которые в Object Pascal являются разновидностью файлов типа file of Char.

    В текстовых файлах помимо признака конца файла Eof используется еще признак конца строки Eoln. Признак Eoln представляет собой последовательность из двух управляющих символов- символа с кодом 13 ("возврат каретки") и символа с кодом 10 ("перевод строки").

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


Рис.3. Представление текстового файла

    Файлы в Object Pascal классифицируются по двум признакам:

    Допустимость применения методов доступа к каждой разновидности файлов по типу покажем такой схемой:


Рис.4. Взаимосвязь методов доступа и типа

    Для описания типизированных и нетипизированных файлов используется зарезервированное слово file. Но, если объявление нетипизированного файла состоит только из одного слова file, то для типизированного еще добавляется зарезервированное слово of, после которого указывается описание типа компонентов файла. Для описания текстови файлов используется предопределенный тип Text.


    Замечание. При объявлении текстовых файлов в Object Pascal следует использовать квалифицируемое имя System.Text, с указанием имени модуля, где описан стандартный тип Text. В противном случае, в зависимости от места объявления, компилятор может его воспринять как свойство Text некоторых компонент.


    Примеры описания файлов:
const 
  m = 30; n = 50; p = 20; 
type
  TWeekDay = ( Sun, Mon, Tue, Wed,Thu, Fri, Sat ); 
  T100 = 1. .100;
  TWeekIncome = array [TWeekDay ] of Currency; 
  CharSet = set of Char; 
  TRecord = record
                      FirstField : String; 
                      SecondField : T100;
                      ThirdField : array [1..10] of TWeekDay; 
            end;
  { Описание файловых типов }
  TWordFile = file of Word; 
  TWeekFile = file of WeekDay;
  { Описание файловых переменных }
  MyTextFile : System.Text;
  NonTypeFile : file;
  ByteFile : file of Byte;
  WordFile : TWordFile;
  ShortStringFile : file of ShortString;
  CharSetFile : file of CharSet;
  WeekInc : file of TWeekIncome;
  RecordFile : file of Trecord;

    На следующем шаге мы рассмотрим типы "класс" и "указатель на класс".




Предыдущий шаг Содержание Следующий шаг