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

Рассмотрим алгоритм добавления

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

Файлы ввода/вывода. Не типизированные файлы ввода/вывода. Процедура работы с не типизированным файлом.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: