Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

StringList Delphi - работа со списком строк

Читайте также:
  1. D триггеры, работающие по фронту.
  2. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  3. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  4. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  5. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  6. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  7. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ

Список строк Delphi TStringList - это структура данных, напоминающая компонент ListBox, но не визуальная, а просто хранящая в памяти и имеющая свойства и методы для работы со строками типа TString.

Для работы со списком строк типа TStringList его сначала необходимо создать с помощью конструктора - Create:

var StrList: TStringList;
begin
StrList:=TStringList.Create;

Теперь нужно описать способ хранения строк в списке. Список строк типа TStringList может сортировать добавляемые строки или хранить без сортировки, а также может игнорировать попытки добавления новой строки при наличии уже сохранённого дубликата:

StrList.Sorted:=True; //True - сортировать, False - не сортировать
StrList.Duplicates:=dupIgnore; //dupAccept - сохранять дубликаты (значение по умолчанию), dupIgnore - игнорировать, dupError - вызвать сообщение об ошибке

Теперь можно добавить в список строки типа TString:

StrList.Add('Новая строка'); //Добавление в конец списка (или в порядке сортировки). Возвращается индекс строки
StrList.Insert(Index, 'Новая строка'); //Строка добавляется на позицию с номером Index. Если список отсортирован, то возникает исключительная ситуация.

Удалить строку:

StrList.Delete(Index); // Удаление строки с номером Index;

Количество строк в списке:

N:=StrList.Count;

Доступ к строке с номером Index:

Str:=StrList[Index];

Index отсчитывается от 0, поэтому номер последней строки:

Last:=StrList.Count-1;

Очищаем список строк:

StrList.Clear;

Если список отсортирован, есть метод для поиска:

StrList.Find(S, Index); // В случае удачного поиска возвращает True, и индекс строки S в переменной Index

 

Если список не отсортирован, то тоже есть функция поиска:

I:=StrList.IndexOf(Text); // Возвращает индекс строки с заданным текстом Text, или -1, если поиск неудачен

 

В конце работы со списком его необходимо удалить из памяти:

StrList.Free;
end;

Как видим, список типа TStringList обладает ценным свойством, которым вряд ли обладает какой-либо другой объект в Delphi, а именно возможностью обнаруживать дубликаты строк. Как узнать, что строка уже содержится в списке? Вот алгоритм:

  1. Запретить списку запись дубликатов, что возможно только при задании сортировки списка. Это делается один раз, при создании списка, например, по событию Формы OnCreate:
    StrList.Duplicates:=dupIgnore;
    StrList.Sorted:=True;
  2. Сохранить в переменной количество строк в списке:
    begin
    Count:=StrLst.Count;
  3. Попробовать записать новую строку:
    StrList.Add(NewLine);
  4. Сравнить количество строк в списке с прежним значением. Если оно совпадёт с количеством перед записью, то такая строка в списке уже есть:
    if StrList.Count=Count
    then ShowMessage('Попытка добавления дубликата');
    end;

Аналогичный, на мой взгляд даже более удобный, алгоритм реализации этой процедуры связан с использованием метода обработки исключений. Если вместо StrList.Duplicates:=dupIgnore для обработки дубликатов использовать значение dupError, это вызовет исключительную ситуацию при попытке добавить дубликат. Соответственно, при добавлении оригинальной строки программа идёт дальше, а при попытке добавления дубликата переходит к операторам секции except/end.

Эти методы работают в случае если список отсортирован. Однако есть задачи, где сортировка не нужна, а находить значение в списке всё равно необходимо. В этом случае нужно пользоваться функцией IndexOf.


Дата добавления: 2015-12-08; просмотров: 315 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.007 сек.)