Удаление записи

При реализации режима удаления записи нам нужно учесть тот факт, что порядок следования записей в файле и коллекции может быть различным. Поэтому в процедуре DeleteItem организуется цикл поиска в файле удаляемой записи:

Procedure DeleteItem;

{Удаляет указанный в Location элемент данных}

var

D: Integer;

PStr: PString;

s: String;

Data: DataType; 

begin

PStr := PS.At(Location){Получаем текущую запись}

s := copy(PSr,1,LName)

seek(DataFile,0);

D := -1;{D - номер записи в файле}

repeat{Цикл поиска по совпадению поля Name:}

inc(D);

read(DataFile,Data);

with Data do while Length(Name) < LName do

Name := Name+' ' 

until Data.Name=s;

seek(DataFile,pred(FileSize(DataFile))); 

read(DataFile,Data); {Читаем последнюю запись} 

seek(DataFile,D);

write(DataFile,Data); {Помещаем ее на место удаляемой} 

seek(DataFile,pred(FileSize(DataFile))); 

truncate(DataFile); {Удаляем последнюю запись} 

with РS do D := IndexOf(At(Location)); 

PS.AtFree(D); {Удаляем строку из коллекции} 

Draw {Обновляем окно} 

end; {DeleteItem}