Лабораторная работа № 15
Файлы с прямым и последовательным доступом.
Цель:
Изучить принципы работы с файлами при помощи прямого и последовательного доступов.
Общие сведения
1. Последовательная запись в типизированные файлы
Прежде чем что-либо записывать в файл, следует открыть его для записи. Открытие для записи задается процедурой REWRITE. После вызова Rewrite (f) значение f можно представить (<>, 0, W), т.е. независимо от предшествующего значения f последовательность в файловой переменной становится пустой:
F
Состояние W
Значение 0 указателя доступного элемента свидетельствует о том, что можно записать новое значение в первый (т.е. с номером 0) элемент файла. Эта процедура вызывается для создания нового файла или обновления старого с уничтожением данных, которые были в нем. После ее выполнения файл называется установленным в начальное состояние для записи.
Запись в файл задается процедурой WRITE. При выполнении ее вызова:
write (f, выражение_типа_компонентов_файла)
вычисляется значение выражения и присваивается доступному элементу файла, после чего указатель доступного элемента сдвигается на 1 элемент. Например, после выполнения последнего из операторов, записанных в программе:
program ...
var f : file of integer; x : integer;
begin ...
rewrite(f); x:=2;
write(f, 1); write(f, x); write (f, x•x) ;
...
end.
файловая переменнаяf получает значение, которое можно представить как (<1, 2, 4>, 3, W).
Вообще, значение (<f0,..., fn-1>, n, W) файловой переменной f при выполнении вызова Write(f, выражение) изменяется на (<f0,..., fn-1>, V>, n+1, W), где Vобозначает значение выражения. В вызове Write можно указывать произвольное число аргументов-выражений одного и того же типа; Write (f, выражение1,…, выражениеn). Такой вызов выполняется на самом деле как последовательность:
Write (f, выражение1),…, Write(f, выражениеn)
Например, вместо Write(f, 1); Write(f, x); Write(f, x•x) можно написать Writ-e (f, 1, x, x•x).
Подчеркнем, что процедуру Writeln нельзя применять к типизированным файлам. Она предназначена лишь для работы с текстами.
Пример:
Требуется создать файл со следующими данными о студентах группы: фамилия и имя студента, а также средний балл его успеваемости.
Данные о студенте можно представить записью типа:
Student = record
SName, Name : string[20];
Ball : real
end.
Связывание и установку файла в начальное состояние для записи оформим процедурой OpenFile, а создание — процедурой CreatFile в такой программе:
program InPutGroup;
type Student = record
Sname, Name : string[20];
Ball : real;
end;
var
Fi : file of Student;
FileName : string; {Переменная для ввода имени файла}
procedure OpenFile;
begin
writeln(‘Задайте имя файла, который будет создаватьcя: ‘); readln(FileName);
assign(Fi, FileName);
rewrite(Fi);
end;
procedure InPutFile;
var St : Student;
Ch : char;
begin
repeat
writeln(‘Задайтеданныеостуденте: ’);
write(‘Фамилия>’);
readln(St.SName);
write(‘Имя>’);
readln(St.Name);
write(‘Средний балл успеваемости>’);
readln(St.Ball);
write(Fi, St); {***}
write(‘Надо ли вводить данные о новом студенте? “Y”/”N”> ’);
readln(Ch);
until (Ch = ‘n’) or (Ch = ‘N’);
close(Fi);
end;
begin
writeln(‘Программа создания файла данных об успеваемости’);
openfile;
creatfile;
end.
1.2. Последовательное чтение типизированных файлов
Для того чтобы читать уже созданный типизированный нужно открыть его для чтения вызовом процедуры RESET(f). После этого файловая переменная устанавливается в начальное состояние для чтения, а номером доступного элемента становится 0 независимо от того, есть ли вообще элементы в файле. Значение f представить как (F, 0, R), т.е.
F …
Состояние R
Если F – пустая последовательность (F=<>), то попытка чтения из файла завершается аварийно, поскольку доступного элемента просто нет!
Файл с диска можно читать только после установки файловой переменной в начальное состояние для чтения, т.е. установка обязательна. Возможность или запрет установки файловой переменной связанной с клавиатурой, зависит от системы программирования. В системе Turbo Pascal такая установка возможна, хотя не обязательна.
Отметим, что в программе может быть произвольное количество вызовов процедуры Resetи что система Turbo Pascal позволяет после выполнения ее вызовов не только читать из файла, но и записывать, т.е. изменять его первый элемент. И вообще, система позволяет изменять с помощью процедуры Writeдоступный элемент файла, каким бы ни было его место в последовательности, и при любом состоянии файла.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.