Файлы с прямым и последовательным доступом (Лабораторная работа № 15)

Страницы работы

14 страниц (Word-файл)

Содержание работы

Лабораторная работа № 15

Файлы с прямым и последовательным доступом.

Цель:

Изучить принципы работы с файлами при помощи прямого и последовательного доступов.

Общие сведения

 (Краткие теоретические сведения о структуре файлов и их назначении смотрите в Лабораторной работе №19)

1. Последовательная запись в типизированные файлы

Прежде чем что-либо записывать в файл, следует открыть его для записи. Открытие для записи задается процедурой REWRITE. После вызова Rewrite (f) значение f можно представить (<>, 0, W), т.е. независимо от предшествующего значения f последовательность в файловой переменной становится пустой:

F

Состояние    W

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

Запись в файл задается процедурой WRITE. При выполнении ее вызова:

write   (f,   выражение_типа_компонентов_файла)

вычисляется значение выражения и присваивается доступному элементу файла, после чего указатель доступного элемента сдвигается на 1 элемент. Например, после выполнения последнего из операторов, записанных в программе:

program ...

var f : file of integerx : 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, xx) можно написать Writ-e (f, 1, x, xx).

Подчеркнем, что процедуру 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доступный элемент файла, каким бы ни было его место в последовательности, и при любом состоянии файла.

Похожие материалы

Информация о работе