15.16. Удаление записи Турбо Паскаль В.В. Фаронов
|
При реализации режима удаления записи нам нужно учесть тот факт, что порядок следования записей в файле и коллекции может быть различным. Поэтому в процедуре 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}
|