uses crt;
type book=record
fam:string[20];
god:word;
naz:string[20];
end;
var f:file of book;
z,b:book;
c:char;
i,j,k:integer;
begin
clrscr;
assign(f,'book');
rewrite(f);
writeln('Введите в файл данные о книгах, окончание Esc');
i:=0;
repeat
i:=i+1;
writeln('Книга ',i);
with z do
begin
write(' Фамилия: ');readln(fam);
write(' Год издания:');readln(god);
write(' Название: ');readln(naz);
write(f,z);
end;
c:=readkey;
until c=#27;
clrscr;
writeln('Содержание исходного файла:');
writeln('------------------------------------------');
writeln('| Автор | Год | Название |');
writeln('------------------------------------------');
reset(f);
while not eof(f) do
begin
read(f,z);
with(z) do
begin
gotoXY(1,whereY);write('| ',fam);
gotoXY(18,whereY);write('| ',god);
gotoXY(26,whereY);write('| ',naz);
gotoXY(42,whereY);writeln('|');
end;
end;
writeln('------------------------------------------');
close(f);
write('Press Enter...');
readln;
{будем удалять записи}
reset(f);
k:=0;i:=0;
while i<=filesize(f)-2-k do{последнюю пока не проверяем, выйдем за файл}
begin
seek(f,i);
read(f,z);
if z.naz='Информатика' then
begin
k:=k+1; {считаем}
for j:=i to filesize(f)-2 do{идем вперед}
begin
seek(f,j+1);{переставляем - сдвигаем - записи вверх на 1}
read(f,b);
seek(f,j);
write(f,b);
end
end
else i:=i+1;{если нет вперед}
end;
seek(f,filesize(f)-1-k);{проверяем последнюю, она сдвинулась на к вверх}
read(f,z);
if z.naz='Информатика' then k:=k+1;
seek(f,filesize(f)-k);{встаем в последнюю не удаленную запись}
truncate(f);{обрезаем файл}
close(f);
reset(f);
if filesize(f)=0 then writeln('Все записи удалены!')
else
begin
writeln('Книги с названием Информатика исключены:');
writeln('------------------------------------------');
writeln('| Автор | Год | Название |');
writeln('------------------------------------------');
while not eof(f) do
begin
read(f,z);
with(z) do
begin
gotoXY(1,whereY);write('| ',fam);
gotoXY(18,whereY);write('| ',god);
gotoXY(26,whereY);write('| ',naz);
gotoXY(42,whereY);writeln('|');
end;
end;
writeln('------------------------------------------');
end;
close(f);
write('Press Enter...');
readln
end.