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

Коллекции строк

begin {PrintList}
WriteLn;
WriteLn;
List^.ForEach(@PrintWord);
WriteLn
end; {PrintList}
var
WordList: PStringCollection;
w: String;
begin {Основная программа}
if not OpenFile(w) then
WriteLn('Нельзя открыть файл '+w)
else
begin
WordList: = New(PStringCollection, Init(200.10));
repeat
w: = GetWord;
if (w < > ' ') and (MaxAvail > 255) then
WordList.Insert(NewStr(w))
until w='';
PrintList(WordList)
end
end.

Отметим, что в операторе:

if (w < > '') and (MaxAvail > 255) then

Осуществляется контроль за доступной динамической памятью. В Turbo Vision есть и встроенные способы контроля кучи – см. п. 19.6.

Как и в любой другой отсортированной коллекции, в коллекции строк по умолчанию хранятся элементы с уникальными ключевыми полями. Чтобы подавить контроль за уникальностью строк, добавьте оператор:

WordList.Duplicates: = True;

Сразу за оператором создания коллекции:

WordList: = New(PStringCollection, Init(200.10));

И сделайте еще один прогон программы, – Вы увидите, как много раз встречается в файле одно и то же слово.

Метод TStringCollection.Compare следует перекрыть, если Вы хотите осуществить свой способ сортировки строк. Например, используя объект:

type
PStrSor =TStrSor;
TStrSor = object (TStringCollection)
Function Compare(k1, k2: Pointer): Integer; Virtual;
end;
Function TStrSor.Compare(k1, k2: Pointer): Integer;
var
s1: PString absolute k1;
s2: PString.absolute k2;
begin
if s1< s2 then
Compare: = 1
else if s1 = s2 then
Compare: = 0
else
Compare: = -1
end;

Вместо PStringCollection, Вы сможете вывести на экран список слов, отсортированных в обратном порядке.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.