Слайд 1Типизированные файлы, их назначение и использование.
Основные процедуры обработки типизированных
файлов
Лекция 26
Слайд 2Типизированный файл состоит из последовательности элементов одного типа и длины.
Каждый элемент файла имеет номер. Первый элемент считается нулевым.
Все
элементы файла имеют одинаковую длину, позиция каждого элемента легко вычисляется. Поэтому указатель может быть перемещен на любой элемент файла, обеспечивая тем самым прямой доступ к нему.
Фактически типизированный файл — это массив на диске с неограниченным размером и сравнительно невысокой скоростью обработки.
Слайд 3Объявление типизированных файлов в программе осуществляется заданием файловой переменной вида
file of тип
где тип — любой тип, кроме файлов
type ИмяТипа = file of Тип;
var ФайловаяПеременная : ИмяТипа;
или
var ФайловаяПеременная : file of Тип;
Слайд 4Процедуры обработки типизированных файлов
Открытие типизированного файла можно произвести стандартными способами:
используя reset и rewrite. Процедура reset применяется для открытия существующего
файла. Процедура rewrite используется для создания нового файла и его открытия.
типизированные и нетипизированные файлы всегда допускают одновременно как чтение, так и запись, независимо от того, были ли они открыты с помощью reset или rewrite;
для чтения и записи типизированного файла используются только процедуры read и write. Использование readln и writeln — запрещено.
Слайд 5READ (ф.п., сп.ввода)
Обеспечивает чтение очередных компонентов типизированного файла. Здесь cn.вводa —
список ввода, содержащий одну или более переменных такого же типа,
что и компоненты файла.
WRITE (ф.п.,сп.вывода)
Используется для записи данных в типизированный файл. Здесь сп.вывода — список вывода, содержащий одно или более выражений того же типа, что и компоненты файла.
filepos (ф.п.)
Функция, возвращает значение типа LONGINT, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода.
Слайд 6filesize (ф.п.)
Функция, возвращает число элементов файла. Если файл пуст, она
возвращает 0. Результат — longint.
seek (ф.п., НомерПозиции)
Перемещает указатель файла
с текущей позиции к позиции с указанным номером, не выполняя чтение или запись. НомерПозиции имеет тип longint.
truncate (ф.п.)
Усекает размер файла до его текущей позиции. Все элементы файла за текущей позицией удаляются, после чего текущая позиция становится концом файла.
Слайд 7Пример:
Разработайте программу ведения файла, содержащего следующие данные о студентах:
Фамилия и
инициалы.
Номер группы.
Оценка на экзамене.
В программе должны быть реализованы следующие функции,
вызываемые из меню:
ввод записей;
корректировка записей;
удаление записей;
просмотр записей на экране.
Слайд 8type
stud=record {Запись, элемент файла}
FIO:string[25];
Ngr:string[4];
Ocen:0..10;
end;
var FStud:file of Stud; {Файловая переменная}
S:stud; f:boolean; k:byte;
Слайд 9procedure VvodZap;
{Процедура ввода (добавления) записей}
var S:Stud; ch:char;
i:integer;
begin
if f=false then {Если файл еще не создан}
begin
rewrite(fstud); {Создаем его}
f:=true; {Признак существования файла}
end
else
begin
reset(Fstud); {Открываем его}
seek(Fstud, filesize(Fstud)); {Переводим указатель в конец файла}
Слайд 10with S do
{Все последующие действия выполняются с
записью S}
while ch'n' do {Пока пользователь не
прекратит ввод}
begin
writeln(‘Введите данные');
writeln(‘Введите ФИО студента');
readln(FIO);
writeln(‘Введите номер группы');
readln(Ngr);
writeln(‘Введите оценку на экзамене');
readln(Ocen);
write(fstud,S); {Записываем S в файл}
writeln(‘Продолжить ввод (y/n)');
readln(ch);
end;
end;
close(Fstud); {Закрываем файл}
end;
Слайд 11procedure prosmotr;
{Просмотр и вывод содержимого файла}
var S:Stud;
begin
if not f
then writeln(‘Файл не создан')
else
begin
reset(Fstud);
if filesize(Fstud)=0 then writeln(‘Файл пуст');
while not EOF(Fstud) do
begin
read(Fstud, S);
{считываем элемент из файла в переменную S}
writeln(S.FIO:27, S.Ngr:7, S.Ocen:3);
end;
close(fstud);
end;
end;
Слайд 12procedure korrect;
{Процедура корректировки данных}
var S:Stud; n:integer;
begin
if not f
then writeln(‘Файл не создан')
else
begin
reset(Fstud);
writeln(‘Введите номер записи'); readln(n);
writeln(‘Введите ФИО студента'); readln(S.FIO);
writeln('Введите номер группы'); readln(S.Ngr);
writeln(‘Введите оценку на экзамене'); readln(S.Ocen);
seek(Fstud,n-1);
{Перевести указатель на элемент предшествующий n}
write(Fstud, S); {Записать новую информацию}
close(Fstud);
end;
end;
Слайд 13procedure udalenie; {Процедура удаления элемента}
var i,n,m:integer; Fstud1: file
of Stud; S:Stud;
begin
if not f then writeln(‘Файл не создан')
else
begin
writeln(‘Введите номер записи');
readln(n);
reset(Fstud);
m:=filesize(Fstud); {Количество записей в файле}
if m>=n then {Если такая запись существует}
begin
assign(Fstud1, 'stud1.dat');
rewrite(Fstud1); {Создаем новый файл}
for i:=0 to n-2 do
begin {Переписываем первые n-1 записей в новый файл} read(Fstud, S); write(Fstud1, S);
end;
Слайд 14 seek(Fstud,n); {Переводим указатель на n+1 элемент}
for i:=n to m-1 do
begin {и переписываем все элементы после него}
read(Fstud, S);
write(Fstud1, S);
end;
close(Fstud); {Закрываем оба файла}
close(Fstud1);
erase(Fstud); {Удаляем исходный файл}
rename(Fstud1,'stud.dat');
{Переименовываем новый файл}
end
Else {Если записи с таким номером нет}
writeln(‘Записи с таким номером нет');
end;
end;
Слайд 15begin
assign(fStud,'stud.dat');
{$I-} {Отключаем контроль ввода-вывода}
reset(Fstud);
{Пытаемся открыть файл на чтение}
{$I+} {Включаем контроль ввода-вывода}
If Ioresult=0 then {Если файл существует}
f:=true {Признак того, что файл существует}
else f:=false; {Файла нет}
while k<>5 do {Организуем меню}
begin
writeln('1. Ввод записей');
writeln('2. Корректировка записей');
writeln('3. Удаление записей');
writeln('4. Просмотр записей');
writeln('5. Выход');
Слайд 16 readln(k);
case k of
1: vvodzap;
2: korrect;
3: udalenie;
4: prosmotr;
else writeln(‘В меню нет такого пункта');
end;
end;
end.
Слайд 17Домашнее задание
1. Составить опорный конспект лекции по теме «Типизированные файлы,
их назначение и использование. Основные процедуры обработки типизированных файлов» на
основе презентации.
2. Программирование на языке Pascal. Рапаков Г. Г., Ржеуцкая С. Ю. СПб.: БХВ-Петербург, 2004, cтр.316-336.