Удаление записи. Режим поиска записи. Итоги.
При реализации режима удаления записи нам нужно учесть тот факт, что порядок следования записей в файле и коллекции может быть различным.
Поэтому в процедуре 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}
Режим поиска записи
Для поиска нужной записи сформируем диалоговое окно, показанное на рис.15.12.
Рис. 15.12. Окно ввода шаблона поиска
С помощью этого окна пользователь может задать несколько начальных букв, используемых как ключ для поиска записи. Получив данные из этого окна, процедура SearchItem организует поиск первой от начала коллекции строки, для которой не выполняется условие:
Pattern >= Item
Где Pattern – образец поиска, Item – текущая строка коллекции. Найденная строка указывается как текущая в поле Location и организуется вывод соответствующего текста в окне просмотра.