Типизированные файлы.Файлы последовательного доступа
Стандартные процедуры и функции
Определение файлового типа, типы файлов
Файловые типы данных
Лекция 1
В практике программирования часто встречаются задачи, решение которых носит регулярный характер и требует большого количества относительно мало изменяемых во времени данных. К ним относятся, например, задачи бухгалтерского учета, оптимального планирования и многие другие. Ввод данных с экрана заново при каждом счете для этих задач очень трудоемок, а часто просто невозможен из-за временных ограничений. Для решения этой проблемы в языках программирования была реализована концепция файлов, что позволяет после набора информации на клавиатуре запоминать ее на магнитном носителе и обращаться к ней непосредственно из обрабатывающих программ при каждом счете.
Файл - это поименованная область данных на внешнем носителе, предназначенная для хранения информации. Файл может быть связан с любым источником или потребителем информации: клавиатурой, принтером, магнитным диском, коммутационным каналом и др. Мы будем рассматривать только стандартные файлы языка ПАСКАЛЬ и дисковые файлы, созданные пользователем, как имеющие самое широкое применение при работе на ПЭВМ ЕС.
Стандартные файлы определены разработчиками системы, и проблемные программисты могут их только использовать.
Файлы пользователя размещаются на внешних носителях. В файлах могут храниться программы, данные, тексты документов, инструкций, закодированные изображения и т. п. Файл может быть входным или выходным. Из входного файла программа получает данные, в выходной файл выводит их. Каждый файл имеет имя, которое зарегистрировано в директории (оглавлении диска). С помощью команд операционной системы и процедур языка ПАСКАЛЬ содержимое директория можно вывести на экран, расширить, изменить имена и выполнить некоторые другие действия.
Файл с точки зрения языка ПАСКАЛЬ - это структурированный тип данных, состоящий из последовательности компонентов одного типа и одной длины.
Файловый тип или переменную файлового типа можно задать одним из трех мпособов.
Формат:
n <имя> = File of <тип>;
n <имя> = Text;
n <имя> = File;
<идентификатор>: <имя типа>;
Здесь
<имя> - имя файлового типа;
File, of –зарезервированные слова (файл, из);
Text –имя стандартного типа текстовых файлов;
<тип> - любой тип Turbo Pascal, файлового.
В зависимости от способа объявления выделяются три вида файлов: типизированные, текстовые и нетипизированные.
Например.
Туре
кarta = File of record
dlina: byte;
ves: real
end;
text80 = File ofstring [80];
f 1 : File ofchar;
f 2 : text;
f 3 :File;
f 4 : text80;
f 5 :File ofкarta;
В примере
f 1, f 4, f 5 – типизированные;
f 2 - текстовый;
f 3 – нетипизированный.
Переменные файлового типа нельзя использовать в выражениях. Файл хранится во внешней памяти на магнитном диске, и по мере необходимости данные из файла вызываются в оперативную память для обработки.
Доступ к компонентам файла осуществляется через указатель файла (буферную переменную). При чтении или записи этот указатель перемещается к следующему компоненту и делает его доступным для обработки. Буферная переменная имеет отличие от всех других переменных: она не может участвовать в выражениях и операторах присваивания.
Рассматриваемая версия языка ПАСКАЛЬ предусматривает два способа доступа к компонентам файла: последовательный и произвольный (прямой). Это разделение вызвано наличием устройств с последовательным и прямым доступом. При последовательном способе доступа поиск начинается с начала файла и проверяется по очереди каждый компонент, пока не будет найден нужный. Произвольный способ доступа позволяет обращаться к компоненту по его порядковому номеру в файле. Допускается значительная гибкость при работе с файлами. Например, компоненты последовательно организованного файла могут обрабатываться произвольно, а компоненты произвольного файла - последовательно. Однако с самого начала на основе анализа структуры данных и существующих ограничений следует четко уяснить, какой способ доступа к компонентам необходимо выбрать. От этого во многом зависит успех решения задачи и эффективность работы соответствующей программы.
Assign (FV, Str) - присвоить имя файлу.
Имя файла, которое является значением Str, присваивается переменной файлового типа FV. С момента выполнения этой процедуры все действия над этой переменной будут эквивалентны действиям над файлом, определяемым значением Sir.
Rewrite (FV) - создать новый файл.
Эта процедура служит для создания нового файла на диске. Имя файла было предварительно определено в процедуре Assign. Если на диске уже был файл с таким именем, он уничтожается. Указатель файла устанавливается в первую позицию (с номером 0). Фактически файл не содержит ни одного компонента, он только подготовлен для загрузки.
Reset (FV) - установить указатель в начало файла.
Выполнение процедуры обеспечивает установку указателя файла на первый компонент. Если эта процедура применена к несуществующему файлу, возникает ошибка ввода-вывода.
Read (FV, xl, x2,... , xn) - читать из файла.
Производится чтение из дискового файла, определенного файловой переменной FV значений xl, x2,... , xn. После завершения выполнения процедуры указатель перемещается на следующий компонент.
Write (FV, xl, x2,... , xn) - записать в файл.
Переменные xl, x2,... , xn записываются в дисковый файл, определенный переменной FV. После выполнения процедуры указатель перемещается к следующему компоненту.
Seek (FV, n) - установить указатель на компонент с порядковым номером n в файле.
Указатель перемещается к компоненту с номером п, начиная счет с нуля, т.е. первый компонент имеет номер 0, второй - 1, третий - 2 и т. д.
Flush (FV) - очистить буфер сектора.
Выполнение процедуры вызывает выталкивание внутреннего буфера в файл, если ранее выполнялись операции записи. Фактически происходит очистка буфера только текстового файла. К закрытому файлу процедура Flush не применяется.
Close (FV) - закрыть файл.
Выполнение процедуры обеспечивает закрытие файла, назначенного переменной FV. Если файл был открыт, никогда не следует выходить из программы, предварительно не закрыв его.
Erase (FV) - уничтожить файл.
Выполнение процедуры вызывает уничтожение файла, назначенного переменной FV. Если производится уничтожение открытого файла, его необходимо предварительно закрыть с помощью процедуры Close.
Rename(FV, Str) - переименовать файл. Выполнение процедуры вызывает занесение в каталог диска (директорий) нового имени файла, определенного переменной FV. Новое имя определяется значением Str.
Truncate (FV) - уничтожить все компоненты файла, начиная с места текущего положения указателя, и подготовить файл для записи.