Понятие файла появляется впервые в операционной системе OS/360 фирмы IBM, причем в ранних версиях системы "настоящим файлом" считался только перфокарточный массив (file = картотека), данные на МД и МЛ обозначались как DS (Data Set - набор данных). В последующих ОС (RSX, UNIX, MS-DOS) файлами становятся именованные организованные наборы данных на любых носителях и устройствах, за сохранность и обновляемость которых (а также передачу в прикладные программы / из прикладных программ) несет ответственность ОС ЭВМ.
Файл – это логически непрерывная именованная область данных на внешнем физическом носителе (обычный файл на диске, коммуникационный порт ЭВМ, устройство печати, клавиатура или другие устройства). Во внешних файлах сохраняются результаты работы программы и располагаются данные, служащие источником информации, необходимой для ее функционирования.
Введение файлового типа в язык ПАСКАЛЬ вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных. Файловый тип данных или файл определяет упорядоченную совокупность произвольного числа однотипных компонент. Общее свойство массива, множества и записи заключается в том, что количество их компонент определено на этапе написания программы, тогда как количество компонент файла в тексте программы не определяется и может быть произвольным.
В Object Pascal различают три вида файлов в зависимости от способа их организации и доступа к элементам: текстовые, типизированные и нетипизированные.
1. Текстовой файл – это файл, состоящий из строк. Примером текстовогофайла может служить файл исходного текста программы в DELPHI (расширение *.pas). Для работы с текстовым файлом должна быть описана соответствующая файловая переменная: Var F: TextFile;.
2. Типизированные файлы имеют строго заданную их описанием структуру, когда все элементы имеют фиксированный и одинаковый размер. Это свойство типизированных файлов позволяет получить доступ к любому компоненту файла по его порядковому номеру. Элементами такого файла являются, как правило, записи. В описании файловой переменной указывается ее тип: Var F: File of TStudent;.
3. Нетипизированный файл – это файл, в котором данные не имеют определенного типа и рассматриваются как последовательность байт. Файловая переменная объявляется: Var F: File;.
Открытие файла - занятие устройства, на котором файл размещен (например, МД), создание в ОП управляющего блока, в котором записывается справка о состоянии файла, и буфера(или набора буферов - буферного пула) для хранения текущей, обрабатываемой записи файла.
2. Организация цикла, управляемого файлом (заканчивается по исчерпании записей файла - наступлении состояния EOF - end of file). Цикл должен содержать команду ввода, вывода или обновления записи.
3. Закрытие файла - выполнение операций по внесению всех окончательных изменений в файл и его реквизиты, освобождение памяти, отведенной под файл, и устройства, на котором он размещался.
Порядок работы с файлами следующий:
Type TMyFile = TextFile; //Объявление файлового типаVar f:TMyFile; //Объявление переменнойbeginAssignFile(F, ‘Filename.txt’); // Связывание файловой переменной F // с именем дискового файла “Filename.txt”Rewrite(F); // Создание нового или {Reset(F);) // открытие уже существующего файла . . .Read(F, Stud); // Чтение данных из файла или (Write(F, Stud)) // запись в файл . . .CloseFile(F); // Закрытие файлаEnd;
Для работы с файлами требуется в первую очередь описать переменную, которая будет связана с файлом. Файловый тип или переменную можно задать одним из трех способов:
Type <имя> = { TextFile | file | file of <тип>};Var <идентификатор1>:<имя> <идентификатор2> : { TextFile | file | file of <тип>};
<имя> - имя файлового типа (правильный идентификатор); FILE OF - зарезервированные слова; <тип> - любой тип кроме файлов.
Файлы и логические устройства становятся доступны программе только после выполнения особой процедуры открытия файла (логического устройства). Эта процедура заключается в связывании ранее объявленной файловой переменной с именем существующего или вновь создаваемого файла, а также в указании направления обмена информацией: чтение из файла или запись в него Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN:
ASSIGN (<ф.п.>, <имя файла или л.у.>);
Здесь <ф. п.> - файловая переменная; <имя файла или л. у.> - текстовое выражение, содержащее имя файла или логическое устройство. Если имя файла задается в виде пустой строки, например, ASSIGN(f, ), то в зависимости от направления обмена данными файловая переменная связывается со стандартным файлом INPUT или OUTPUT.
Имена файлов
Имя может содержать до 8 символов, расширение - до трех. Могут использоваться следующие символы:
A - z 0 - 9 ( ) { } @ # $ 1 0% ^ & ! - _ / ' ~
Полное имя файла в MS DOS содержит весь путь по дереву от корневой директории к нужному файлу. Например, C:\ST\LAB\work.pas, где C - имя диска, ST - имя директории на диске, LAB - имя поддиректории директории ST, work.pas - имя программы на Паскале.
Инициализация файла
Инициировать файл - значит указать для него направление передачи данных. В Паскале можно открыть файл для чтения, для записи информации, для чтения и записи одновременно.
Инициализация файла для чтения:
RESET (ф. п.);
Здесь RESET - стандартная процедура Паскаля <ф. п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством - приемником информации.
Инициализация файла для записи:
REWRITE (ф. п.);
Здесь REWRITE - стандартная процедура Паскаля
Порядок работы с файлами приведен ниже в таблице 7.1
Таблица 7.1 – Работа с файлами
Действие
text
file of ...
file
Связывание с переменной
assign(f,<имя файла>);
assign(f,<имя файла>);
assign(f,<имя файла>);
Открытие файла на чтение
reset(f);
reset(f);
reset(f[,<число байт>]);
Открытие файла на запись
rewrite(f);
rewrite(f);
rewrite(f[ ,<число байт>]);
Чтение
read(f,...); readln(f,...);
read(f,...);
blockread(f, ..., <количество> [,<cчитано>]);
Запись
write(f,...); writeln(f,...);
write(f,...);
blockwrite(f, ..., <количество> [,<записано>]);
Закрытие файла
close(f);
close(f);
close(f);
При работе с файлами третьего типа <число байт> указывает, количество байт, считываемых или записываемых в файл за одну операцию. <количество> указывает на размер чтения или записи в байтах. Для определения этого параметра можно воспользоваться функцией SizeOf(), в качестве параметра которой задается тип или идентификатор.
При считывании данных из файла можно воспользоваться функцией Eof(), которая показывает, был ли достигнут конец файла.
Для файлов второго и третьего типа возможно проведение записи в файл, открытый с помощью функции Reset(), обеспечивающее модификацию и дозапись файла.