Сравнение текстовых и типизированных файлов

Текстовые файлы Типизированные файлы
1. Подготовка файла для записи в конец файла
Append(F) //Открыть файл на дописывание Seek(F,FileSize(F)) //Установить файловый указатель на конец файла
2. Выдача последних k строк (компонентов)
var F:text; name,s:string; i,k,n: integer; begin write('Имя файла:'); readln(name); Assign(F, name); Reset(F); write(’Сколько строк выдать?'); readln(k); n:=0; //Подсчет числа n строк в файле while not Eof(F) do begin readln(F, s); n:=n+1 end; Reset(F); if (n>k) then //Если строк больше, чем запрошено for i:=1 to n-k do //то проброс n-k строк readln(F, s); //из начала файла while not Eof(F) do //Вывод строк на экран begin readln(F, s); writeln(s) end; Close(F) end. var F:file of integer; name:string; x,k,n: integer; begin write('Имя файла:'); readln(name); Assign(F, name); Reset(F); write('Сколько чисел выдать?'); readln(k); n:=FileSize(F); //Определение числа компонентов     if (n>k) then //Если чисел больше, чем запрошено Seek (F,n-k); //то установка файлового указателя //на k-е число от конца while not Eof(F) do //Вывод чисел на экран begin read(F,x); write(x, ’ ’) end; Close(F) end.
3. Замена строки (компонента) с заданным номером
Открываем новый временный файл Ft с именем, полученным добавлением символов ’tmp’ к имени исходного файла. Копируем строки из файла F в файл Ft, считая строки. Если номер строки равен k, вместо строки исходного файла пишем новую строку. Оба файла закрываем, исходный файл удаляем, а временный файл переименовываем в исходный. var F,Ft:text; name,s,snew:string; i,k: integer; begin write(’Имя файла:’); readln(name); Assign(F, name); Reset(F); write(’Какую строку заменить?’); readln(k); //Номер заменяемой строки write(’Новая строка:’); readln(snew); Assign(Ft, ’tmp’+name); Rewrite(Ft); i:=0; //Счетчик строк while not Eof(F) do begin readln(F,s); i:=i+1; if i=k tnen writeln(Ft,snew) else writeln(Ft,s) end; Close(F); Close(Ft); Erase(F); Rename(F,name) End.     var F:file of integer; name:string; k,xnew: integer; begin write(’Имя файла:’); readln(name); Assign(F, name); Reset(F); write(’Число с каким номером заменить?’); readln(k); //Номер числа write(’Новое число:’); readln(xnew); Seek(F,k); Write(F,xnew); Close(F) End.

Пример работы с типизированными файлами из записей

Создать файл из записей, где первое поле – фамилия, второе поле – год окончания мехмата. Исходные данные ввести с клавиатуры, признаком окончания ввода служит строка '---' при вводе фамилии.

Найти выпускника, ранее всех закончившего мехмат.

Переписать в новый файл такого же типа записи о выпускниках заданного года. Выдать оба файла на экран.

Program File_Rec;

type stud=record

FIO:string[15];

year:word

end;

Fstud= file of stud;

var F1,F2: Fstud; //Файлы из записей

name1, name2: string[10];

Y: word; //Заданный год окончания

const tabs= #9#9; //Табуляция для вывода на экран

procedure Creat_F(var F:Fstud);

var s: stud;

begin

repeat

write(’FIO или ---:’); readln(s.FIO);

if s.FIO = ’---’ then break;

write(’year:’);

readln(s.year);

write(F, s)

until false;

end;

procedure Print_F(var F:Fstud);

var s: stud;

begin

while not Eof(F) do

begin

read(F, s);

writeln(s.FIO, tabs, s.year)

end

end;

procedure Min_Year(var F:Fstud);

var s, min: stud; //Запись min для выпускника с минимальным годом выпуска

begin

min.FIO:=''; //Начальные значения

min.year:=Maxint; //перед циклом поиска

while not Eof(F) do

begin

read(F, s); //Чтение записи

if (s.year < min.year) //Если год из записи меньше минимального года,

then min:=s //то запоминание нового минимального

end;

writeln(min.FIO, tabs, min.year) //Вывод записи с минимальным годом

end;

procedure F_F(var F1,F2:Fstud; Y:word);

var s: stud;

begin

while not Eof(F1) do

begin

read(F1, s); //Чтение записи

if (s.year=Y) //Если год из записи файла совпадает с заданным годом

then write(F2, s) //то копирование записи в файл F2

end

end;

Begin

//______ Файл выпускников ______

write('Имя файла1:'); readln(name1);

Assign(F1, name1);

Rewrite(F1);

writeln(' Ввод данных для файла выпускников:');

Creat_F(F1);

Reset(F1);

writeln(' Файл выпускников:');

Print_F(F1);

writeln(' Выпускник, ранее других окончивший мехмат');

Reset(F1);

Min_Year(F1);

//______ Файл выпускников заданного года ______

write('Имя файла2:'); readln(name2);

Assign(F2, name2);

Rewrite(F2);

write('Год выпуска:'); readln(Y);

Reset(F1);

F_F(F1,F2,Y);

writeln(' Файл выпускников ', Y, ' года:');

Reset(F2);

Print_F(F2);

Close(F1);

Close(F2);

end.

Процедурные типы

Наши рекомендации