Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algoritmizatsia_i_programmirovanie_ShPOR.doc
Скачиваний:
6
Добавлен:
26.04.2019
Размер:
376.83 Кб
Скачать

26.Работа с файлами в Pascal.

Файл – это именованная область данных на внешнем физическом носителе. Он определяет упорядоченную совокупность произвольного числа однотипных компонент, соответствующих последовательности записей на внешнем носителе. Чтение из файла и запись в файл ведутся покомпонентно. С каждым файлом связан указатель компонента – внутренняя переменная, не имеющая имени, в которой хранится номер текущей компоненты. Если файл не пуст, то указатель указывает начало некоторого компонента и его значение равно номеру этого компонента (нумерация начинается с нуля), либо указатель совмещен с признаком конца и его значение равно количеству компонентов.

Turbo Pascal поддерживает три файловых типа: текстовые файлы, типизированные файлы, нетипизированные файлы. Для работы с файлами в программе необходимо определить файловую переменную.

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

var tStory: Text;

Описание типизированных файлов имеет вид:

var fComp: File of T;

где T - тип компоненты файла. Примеры описания файловой переменной типизированного типа:

type M= array[1..500] of Longint;

var f1: File of Real;

f2: File of Integer; fLi: File of M;

Нетипизированные файлы описываются с помощью служебного слова File:

var f: File;

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

Turbo Pascal вводит ряд процедур и функций, применимых для любых типов файлов: Assign, Reset, Rewrite, Close, Rename, Erase, Eof, IOResult.

Процедура Assign(f; ‘FileName’) связывает логический файл f с физическим файлом, полное (с указанием пути) имя которого задано в строке FileName.

Процедура Reset(f) открывает логический файл f для последующего чтения данных или, как говорят, открывает входной файл. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента.

Процедура Rewrite(f) открывает логический файл f для последующей записи данных (открывает выходной файл). После успешного выполнения этой процедуры файл готов к записи в него первого компонента.

Процедура Close(f) закрывает открытый до этого логический файл. Вызов процедуры Close необходим при завершении работы с файлом. Если по какой-то причине процедура Close не будет выполнена, файл все же будет создан на внешнем устройстве, но содержимое последнего буфера в него не будет перенесено. Для входных файлов использование оператора закрытия файла необязательно.

Логическая функция EOF(f): boolean возвращает значение TRUE, когда при чтении достигнут конец файла. Это означает, что уже прочитан последний элемент в файле или файл после открытия оказался пуст.

Процедура Rename(f; ‘NewName’) позволяет переименовать физический файл на диске, связанный с логическим файлом f. Переименование возможно после закрытия файла.

Процедура Erase(f) уничтожает физический файл на диске, который был связан с файловой переменной f. Файл к моменту вызова процедуры Erase должен быть закрыт.

Функция IOResult: Integer возвращает целое число, соответствующее коду последней ошибки ввода - вывода. При нормальном завершении операции функция вернет значение 0. Значение функции IOResult необходимо присваивать какой - либо переменной, так как при каждом вызове функция обнуляет свое значение. Функция IOResult работает только при выключенном режиме проверок ошибок ввода-вывода или с ключом компиляции {$I-}.

Запись в файл и чтение из файла производится покомпонентно с помощью операторов Write(f,x1,x2,..xn) и Read(f,x1,x2,..xn,), соответственно, где x1,x2,..xn – переменные (компоненты) файла. После записи (чтения) каждой переменной значение указателя увеличивается на единицу, что соответствует перемещению к следующему компоненту файла. Количество компонентов, записанных в файл, можно определить с помощью функции N:=Filesize(f) . При необходимости записи или чтения в заданном компоненте файла нужно предварительно указатель установить в номер этого компонента с помощью процедуры Seek(f,k), где k – номер, в который устанавливается указатель. Так при выполнении:

Seek(f,2);

Read(f,x);

Write(f,y);

Переменная x будет прочитана из компонента с номером 2, а компонента y будет записана в компонент с номером 3.

Текущее положение указателя k можно узнать с помощью функции:

K:=FilePose(f);

При работе с текстовым файлом следует помнить, что в отличии от типизированного, после открытия файла процедурой Reset (f) разрешается только чтение. При открытии процедурой Rewrite (f) разрешается только запись в него, при этом прежняя информация стирается. Для сохранения информации в текстовом файле его следует открывать процедурой Append(f). В этом случае указатель ставится на конец файла и последующие записи добавляются в новые строки.

Организация чтения с проверкой условия конца файла: if not Eof(f) then Read(f,x);

Для текстовых файлов введены модификации операторов ввода/вывода: Readln, Writeln, которые осуществляют переход на следующую строку после чтения или записи указанных в операторе переменных. При этом оператор Writeln записывает символ конца строки EOLN.

Пример 1: Создание текстового файла Work.txt:

Var

F: text;

Begin

Assign(f,’work.txt’);

Rewrite (f);

Write(f,’Текстовый файл’);

Close(f);

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]