Классы TStrings и TStringList. Основные методы. Использование в программах на Delphi. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Классы TStrings и TStringList. Основные методы. Использование в программах на Delphi.



Список строк

Список строк (класс TStrings, описанный в модуле Classes) полностью соответствует

своему названию и предназначен для:

О хранения строк;

О обращения к списку строк как к массиву и получения строки по ее номеру

(индексация начинается с нуля);

О поиска строк;

О добавления или удаления строк в конкретные места списка.

for i:= 1 to 10 do

SList.Add('добавление в конец списка ' + IntToStr(i));

SList.Insert(5, 'добавление в 6-ю позицию списка');

SList[3] :- 'изменение 4-й строки';

Создание программ для Windows 115

WriteLn(SList[1]); // вывод 2-й строки

SList.Delete(O); // удаление первой строки

Для удаления всех строк применяется метод Clear:

SList.Clear;

Для сравнения списков служит метод Equals:

if SList.Equals(MyList) then...

Для перестановки двух строк местами предназначен метод Exchange:

SList.Exchange(0,3 1;

Переместить строку со старого места на новое позволяет метод Move:

SList.Moved,8);

Поиск первого вхождения строки в список осуществляет метод IndexOf:

i:= SList.IndexOf('строка 5 ');

Если строка в списке не найдена, то возвращается значение -1.

Сохранить весь список в файле можно при помощи метода SaveToFile:

SList. SaveToFile('С:\Strings.TXT');

Для чтения списка из файла служит метод LoadFromFite:

SList-LoadFromFilef'C:\Strings.TXT');

Каждая строка текста в исходном файле должна быть отделена от следующей сим-

волом возврата каретки.

Все содержимое списка строк можно представить в виде одной длинной строки,

обратившись к свойству Text:

WriteLnl SList.Text);

Список строк имеет определенную прикладную направленность. В системе Windows

стандартным считается способ хранения настроек программы в виде файла.INI.

когда название характеристики и ее значение разделяются знаком равенства. Вместо

знака равенства можно использовать другие символы — они задаются свойством

fJameValueSeparator. В частности, собственные настройки Windows хранятся в файлах

WIN.INI и SYSTEM JNL

iCountry=7

Список строк позволяет автоматически выделять из таких строк название (часть

текста до знака равенства) и значение (часть текста после знака равенства). Для

этого служат соответственно свойства

Names[номер-строки]

и

Values[название]

Например, если выполнен оператор

SList[l]:= 'Левая позиция окна=100';

116 Урок 2. Основы программирования в среде Delphi 7

то значением выражения Names[l] будет строка ≪Левая позиция окна≫, а значением

выражения Values [≪Левая позиция окна≫] — строка ≪100≫. Для получения значения

по индексу можно воспользоваться свойством ValueFromIndextnoMep-строки].

В строках подобного форматаможно выполнять поиск с помощью метода IndexOfName,

который в качестве параметра получает часть строки, относящуюся к названию, а воз-

вращает номер первой строки с подходящим названием или число -1 при неудаче.

В описанном примере вызов функции

SList.IndexOfName('Левая позиция окна')

вернет значение 1.

Очень полезная особенность списка строк — возможность хранить связанные со

строками объекты (класса TObject и унаследованных от него классов). Представьте

себе, что пользователю предлагается выбрать строку из длинного списка (в элементе

управления), который последовательно заполнялся значениями строк из массива, а

затем был автоматически отсортирован. В такой ситуации невозможно определить

соответствие выбранной строки номеру в исходном массиве обычными средствами

без сравнения выбранной строки с каждым элементом массива (и даже это не гаран-

тирует результат, если в массиве могут присутствовать одинаковые строки).

Возможность связывать объекты со строками пригодится вам и в том случае, когда в

списке хранятся названия объектов и объекты желательно связать с этими назва-

ниями.

Если требуется заполнить список, который будет затем отсортирован автоматиче-

ски, и сохранить возможность определения исходных номеров строк, то удобнее

воспользоваться методом AddObject, который позволяет вместе со строкой указать

сопутствующую информацию в виде объекта класса TObject.

for i:= 1 to 10 do

SList.AddObject('строка'.TObject(i));

Хотя все элементы списка SList теперь имеют одинаковые значения, их можно без

проблем различать по уникальным номерам от 1 до 10. Для этого надо воспользо-

ваться методом IndexOfObject, который в качестве параметра получает ссылку на

объект, а в качестве значен ия возвращает номер соответствующей строки в списке

или -1 в случае неудачи:

i:= SList. IndexOfObject f TObject (.7));

У класса TStrings имеется также полезное свойство Count, хранящее число строк в

списке.

Хотя в компонентах в качестве типа соответствующих свойств обычно указывается

только что описанный класс TStrings, использовать его в программе явно нельзя.

В частности, нельзя пытаться создать новый объект с помощью конструктора:

SList:= TStrings.Create;

Но так как программисту вполне могут потребоваться возможности такого мощного

класса, в системе Delphi 7 реализован его наследник, который называется TStringList,

Создание программ для Windows 117

содержит всю функциональность родителя и допускает свое использование в про-

грамме. Чтобы включить в исходный текст приведенные выше команды, надо пере-

менную SList описать как имеющую тип TStringList:

var SList: TStringList;

SList:= TStringList.Create;

SList.AddObject('строка1,TObject(12));

В классе TStringList добавилось несколько новых полезных методов и свойств. Метод

Sort позволяет выполнить сортировку всех строк в списке в порядке возрастания,

при условии, что свойство Sorted имеет значение False (в противном случае при

добавлении новой строки она будет автоматически помещаться в список в соот-

ветствии с требованиями упорядоченности). В связи с тем, что класс TStringList

поддерживает сортировку, немного изменилась работа ранее описанных методов.

Теперь при добавлении, перемещении или изменении строк в списке выполняется

проверкасвойс гна Sorted, и при необходимости изменения вносятся в упорядочен-

ный список с учетом значений строк. Кроме того, хранить в списке строки с одина-

ковыми значениями не разрешается. Чтобы при попытке добавить новую строку не

возникало ошибок, надо предварительно проверить, не присутствует ли уже такая

строка в списке. Для этого предназначен метод Find, который имеет следующий

заголовок:

function Find(const S: string; var Index: Integer)

: Boolean; virtual;

Проверяется, можно ли добавить строку в отсортированный список. Если строка S

в списке уже есть, функция возвращает значение True, если нет — False, а в перемен-

ную Index записывается номер позиции в списке, куда будет добавлена строка S.

ВНИМАНИЕ Функцию Find можно применять только для отсортированных

списков. Для несортированных списков надо использовать метод

IndexOf.

Из новых свойств надо отметить свойство Objects, представляющее собой массив

объектов, ассоциированных со строками. Получить доступ к нужному объекту можно

с помощью индекса:

SList.Objects[4]

Свойство Sorted указывает, надо ли выполнять автоматическую сортировку списка

(то есть, добавлять новые записи не в коней списка, а в соответствии с правилами

упорядочивания символов для национальной версии Windows). Если это свойство

имеет значение False и в него записывается значение True, то программа немедленно

выполняет сортировку всего списка (для больших списков это может оказаться

длительным процессом).

Свойство Duplicates определяет, что произойдет в программе, когда обнаружится попытка

добавления в отсортированный список строки, которая уже содержится в нем.

1 1 8 Урок 2. Основы программирования в среде Delphi 7

Это свойство может принимать одно из трех значений.

Таблица 2.2. Значение свойства Duplicates

Значение свойства Действие

duplgnore Попытка добавления строки игнорируется

dupError Возникает ошибка

dupAccept Производится добавление строки, совпадающей с одной из существующих

ЗАМЕЧАНИЕ Другие стандартные классы Delphi будут далее рассматриваться

по мере необходимости.__

 

 



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 756; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.207.218.95 (0.015 с.)