Объявление файловой переменной 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объявление файловой переменной



В языке ObjectPascal программист оперирует не с самим файлом, а с некоторой переменной, которая представляет файл в программе. Такая переменная называется файловой переменной. Как и любая другая переменная, файловая переменная должна быть объявлена в разделе описания переменных с указанием ее типа. Типы файловых переменных зависят от типов данных файла. Следует заметить, что переменная файлового типа является достаточно специфичной. Ее нельзя, например, использовать в выражениях и операциях присваивания.

Объявление типа для файловой переменной выглядит так:

Рисунок 11.1 – Структура описания типа файловой переменной

Ниже приводится несколько примеров описания таких типов.

Type

TMyCharFile = file of char; // файл символов

TMyRealFile = file of real; // файл вещественных чисел

TMyIntFile = file of integer; // файл целых чисел

Файловая переменная объявляется так же, как и любая другая переменная, например, так:

var f1: TMyIntFile; f2: TMyCharFile;

ObjectPascal позволяет объявлять файловые переменные и без введения соответствующего типа, то есть допустимо такое описание:

var f1: file of integer; f2: file of char;

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

Назначение файла файловой переменной

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

Обращение к этой процедуре выглядит так:

AssignFile (<файловая переменная>, <имя файла>);

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

Ниже приведены примеры вызова процедуры AssignFile:

AssignFile (f1, 'a:\result.txt');

AssignFile (f2, '\students\ivanov\komi.txt');

fname:= 'otchet.txt');

AssignFile[ft,fname);

Обратите внимание, процедура AssignFile устанавливает связь между файловой переменной и именем файла и безразлична к тому, существует ли файл с указанным именем или нет.

Открытие файла

Для того чтобы начать работу с файлом, его нужно “открыть”. При открытии файла устанавливается связь между файловой переменной и самим файлом. Существует два способа открытия типизированного файла.

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

Реализуется такой способ открытия файла процедурой Rewrite.

Обращение к этой процедуре выглядит так:

Rewrite (<файловая переменная>);

Ниже приведен пример вызова процедуры Rewrite:

Rewrite (f1);

Второй способ открытия файла, предполагает, что файл существует, и будет обрабатываться.

Реализуется такой способ открытия файла процедурой Reset.

Обращение к этой процедуре выглядит так:

Reset (<файловая переменная>);

Ниже приведен пример вызова процедуры Reset:

Reset (f1);

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

Если попытаться с помощью процедуры Reset открыть несуществующий файл, то возникнет исключительная ситуация и выполнение программы будет прервано. Прерывания программы можно избежать, если воспользоваться конструкцией try … except … end.

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

assignFile(f1,’someFile.dat’);

try Reset(f1); except rewrite(f1); end;

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

assignFile(f1,’someFile.dat’);

{$I-} Reset(f1); {$I+};

if IOResult <> 0 then rewrite(f1);

В приведенном примере для анализа успешности завершения операции связанной с вводом–выводом используется функция IOResult, которая возвращает ноль при успешном завершении операции. Особенность применения этой функции состоит в том, что на время выполнения контролируемой операции должен быть отключен контроль системы за выполнением контролируемой операции. Это делается с помощью директив компилятору {$I-} и {$I+}.

Текущая позиция файла

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

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

Обращение к этой процедуре выглядит так:

Seek (<файловая переменная>, <номер записи>);

Ниже приведены примеры вызова процедуры Rewrite.:

Seek(f1,0); // установка файла в начало

Seek (f1,10); // переход к записи файла с номером 10

Seek (f1, FileSize(f1)-1); // переход к последней записи файла

Seek (f1, FileSize(f1)); // переход к концу файла

В последних примерах для определения номера последней записи используется функция FileSize, возвращающая количество записей в файле. Так как номера записей начинаются с 0, то номер последней записи на единицу меньше количества записей в файле.

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

Обращение к этой функции выглядит так:

FilePos (<файловая переменная>);

Чтение данных из файла

Чтение из файла выполняется при помощи процедуры read.

Обращение к этой процедуре выглядит так:

Read (<файловая переменная>, <переменная>);

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

После считывания записи из файла текущая позиция файла увеличивается на единицу, как бы готовя файл к считыванию следующей записи. После считывания последней записи файла, текущая позиция файла выходит за его пределы. В этом случае фиксируется ситуация «конец файла». Отследить эту ситуацию можно с помощью функции eof. Значение этой функции равно false, если прочитанный элемент данных не является последним в файле, т.е. возможно дальнейшее чтение. Если прочитанный элемент данных является последним, то значение eof равно true.

Обращение к этой функции выглядит так:

Eof(<файловая переменная>);

Значение функции eof можно проверить сразу после открытия файла. Если при этом оно окажется равным true, то это значит, что файл не содержит ни одного элемента данных, т.е. является пустым (размер такого файла равен нулю).

Запись данных в файл

Запись данных в файл осуществляется с помощью процедуры write.

Обращение к этой процедуре выглядит так:

write (<файловая переменная>, <переменная>);

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

После записи текущая позиция файла увеличивается на единицу, как бы готовя файл к заполнению следующей записи. После заполнения последней записи файла, фиксируется ситуация «конец файла», но при этом запись разрешается, а конец файла автоматически смещается.

Обрезка “хвоста” файла

Файл можно не только расширять, путем создания дополнительных записей, но и сокращать, удаляя последние записи. Для этого используется процедура truncate.

Обращение к этой процедуре выглядит так:

truncate (<файловая переменная >);

Эта процедура удаляет все записи файла, начиная с текущей позиции и до конца файла, то есть она как бы переносит конец файла в текущую запись.

Закрытие и удаление файлов

После окончания работы с файлом, его следует закрыть. Для закрытия используется процедура Close.

Обращение к этой процедуре выглядит так:

CloseFile (<файловая переменная >);

При необходимости файл можно удалить. Для этого используется процедура Erase.

Обращение к этой процедуре выглядит так:

Erase (<файловая переменная >);

11.2 Перечень основных процедур и функций для работы с типизированными файлами

Таблица 11.1 – Основные процедуры, обеспечивающие работу с файлами
Назначение операции Синтаксис операции
Определение имени AssignFile (<файловая переменная>, <имя файла>)
Создание (очистка) Rewrite (<файловая переменная >)
Установка в начало Reset(<файловая переменная >)
Закрыть файл CloseFile (<файловая переменная >)
Удалить файл Erase(<файловая переменная >)
Размер файла FileSize(<файловая переменная >)
Номер текущей записи FilePos(<файловая переменная >)
Перейти к записи Seek(<файловая переменная >, <номер записи>)
Записать в текущую файловую позицию Write(<файловая переменная >, <переменная соотв. типа>)
Читать из текущей файловой позиции Read(<файловая переменная >, <переменная соотв. типа>
Обрезать «хвост» Truncate(<файловая переменная >)
Конец файла Eof(<файловая переменная >)

11.3 Создание проекта «Результаты аттестации»

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

Реализация проекта находится в папке kid\pub\subject\1_kurs\ projectToLection\.To_lection_18_19.

Данный проект можно рассматривать как пример выполнения задания к самостоятельной работе. Точного следования этому образцу от студента не требуется.

Требования к проекту

Проект должен обеспечить:

– Просмотр записей файла в StringGrid.

– Добавление группы записей из StringGrid к файлу.

– Поиск записи по заданной фамилии.

– Удаление записи.

– Подсчет количества отличников в файле.

– Сохранение файла под другим именем.

– Сортировку файла по фамилиям и по результатам успеваемости.

– Вставку записи в упорядоченный файл.

– Удаление записи из упорядоченного файла.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 609; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.12.222 (0.016 с.)