Рассмотрим алгоритм добавления
1)открыть исходный файл в режиме чтения и промежуточный в режиме записи
2)переписать все записи исходного файла в промежуточный
3)записать в промежуточный файл новую запись
4)закрыть оба файла
5а)переписать из промежуточного файла в исходный и удалить промежуточный файл.
5б)Удалить исходный файл, переименовать промежуточный файл в имя исходного.
Пример
var
f1,f2:file of byte;
I;byte;
begin
Assign(f1, ‘a.dat’);
assign(f2, ‘b.dat);
***
<запись>
***
Reset(f1);
Rewrite(f2);
while not eof9f10 do
begin
read(f1,i0;
write(f2,i);
end;
close(f1)
close(f2);
Erase(f1);
Rename(f2, ‘a.dat’);
end.
Удаление записи
Удаление записи производится аналогично записи, за исключением того, что в промежуточный файл пишутся только не удаляемые записи (используется конструкция i<>i1 then … во время выбора)
Прямой доступ к типизированному файлу.
Для установления прямого доступа использую процедуру:
Seek(<ф.п.>, <№ условной границы>); - устанавливает указатель в файле на границу, номер которой во втором параметре. Пример:
Seek(f,25);
Read(f,ch);
Пример
***
var
f:file of char;
ch:char;
begin
Assign(f, ‘a.dat’);
rewrite(f);
for ch:=‘a’ to ‘z’ do
write(f, ch);
close(f);
reset(f);
Seek(f,3);
read(f, ch);
Seek(f, 25);
read(f, ch);
seek(f, 26);
read(f, ch);
close(f);
лекиция №14
Файл ввода/вывода. Прямой доступ к типизированном файлу.
Другие функции используемые при прямом доступе
Filesize(f); - возвращает количество записей типа longint(0, если файл пустой)
Filepos(f); - возвращает значение longint, которое показывает текущую позицию указателя в файле(номер условной границы)
Пример
If filepos(f)=filesize(f) then write(‘’);
While filepos<>filsesize(f) do
Read(f,ch);
К последней записи
Seek(f,filesize(f)-1);
Reed(f,ch);
Truncate(f); - отсекает часть открытого файла с условной границы, на которой установлен указатель, подтягивая конец файла к этой границе.
Пример:
Seek(f,10);
Truncate(f);
Добавление записи в т.п. с помощью процедуры Reset.
reset(f);
Seek(f, filesize(f));
write(f, ch);
reset(f);
write(f, ‘*’);
close(f);
пример: пусь требуется записать в файл три записи содержащие слово «строка»,и к концу строки добавить номер записи в файле.
const
st:string=’строка’;
var
f:FILE of string;
s:strig;
i:byte;
begin
.
.
Rewrite(f);
For i:=1 to 3 do
Begin
S:=’’;
Str(i,s);
St:=st+s;
Write(f,st);
Delete(st,7,1);
End;
Close(f);
Reset(f);
Write(f,st);
Close(f);
Лекция №15
Файлы ввода/вывода. Не типизированные файлы ввода/вывода. Процедура работы с не типизированным файлом.