Иллюстрированный самоучитель по Tirbo Pascal



              

Доступ к элементам коллекций - часть 3


  • она должна быть рассчитана на дальнюю модель вызова (для этих целей мы указали директиву far сразу за заголовком PrintBook);
  • она должна быть локальной для процедуры, в которой реализуется вызов

    ForEach, именно поэтому мы разместили ее в теле процедуры PrintAll, Осталось в тело главной программы поместить оператор

  • PrintAll (BookList) ;

    перед оператором уничтожения коллекции. Если Вы запустите таким образом подготовленную программу на счет, на экран будет выведено:

    Джордейн Р .

    Справочник программиста персональных компьютеров типа IBM PC,

    XT и AT

    Финансы и статистика, 1991, 544

    Шелдон

    Язык Си для профессионалов

    И. В. К. -СОФТ, 1991, 383

    Скэнлон Л.

    Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера

    Радио и связь, 1991, 336

    Йенсен К., Вирт Н.

    Паскаль . Руководство для пользователя и описание языка

    Финансы и статистика, 1982, 151

    Все действия по выводу содержимого коллекции реализуются методом ForEach, который для собственно вывода каждого очередного элемента обращается к процедуре PrintBook.

    Точно таким же образом реализуется обращение к методам FirstThat и LastThat. Например, если нам потребуется отыскать в каталоге запись, содержащую слово «Вирт» в noлe Autor, можно добавить в программу следующие строки 

    Procedure SearchAutor(BookList: Pcollection; A: String); 

    Function FindAutor(P: PBook): Boolean; far; 

    begin

    FindAutor := pos(А, Р.Autor) <>0 

    end; {FindAutor} 

    var

    Book: PBook; 

    begin {SearchAutor}

    Book := BookList.FirstThat(FindAutor); 

    if Book = NIL then

    WriteLn('Heт автора ',А)

    else with Book do

    begin

    WriteLn;

    PrintItern(Autor,Title,PubHouse,Year,Pages) 

    end 

    end; {SearchAutor}

    В тело главной программы следует добавить оператор

    SearchAutor(BookList,'Вирт'); 

    Собственно поиск элемента коллекции реализуется оператором

    Book := BookList.FirstThat(FindAutor);

    который для этих целей обращается к методу TCollection.FirstThat. В этом методе реализуется последовательный анализ всех элементов коллекции, начиная с самого первого (с индексом 0), причем для анализа используется вызов функции FindAutor. Как видим, эта функция нужным образом анализирует очередную запись и возвращает True, если условие поиска удовлетворено. Метод FirstThat возвращает указатель на элемент коллекции, для которого удовлетворено условие поиска, или NIL, если этому условию не отвечает ни один элемент. Таким образом, оператор




    Содержание  Назад  Вперед