Delphi. Урок 14. Работа со списками строк TStringList или «сложные» типы

A

AngelOfLove

Original poster
В этом уроке мы рассмотрим новый тип данных TStringList, который содержит в себе список строк типа string.

Что такое TStringList и что такое «сложные» типы
Другими словами, TStringList — это массив строк, который имеет целый ряд различных возможностей, позволяющих производить различные операции над строками.
TStringList представляет собой не просто переменную, которые мы с вами разбирали в предыдущих уроках (integer, string и т.п.). Переменная типа TStringList — это объект, который непосредственно внутри себя снабжен определенными функциями, процедурами и параметрами. Фактически, выглядит это все как и у обычного компонента (присутствуют «встроенные» функции, процедуры, параметры), а если забежать немного вперед, то компоненты — это и есть такие же переменные (прямо как и TStringList и даже integer), хотя будет гораздо более грамотней их называть именно объектами. Но, пока мы еще не полностью осознаем структуру объектов в Delphi, забегать вперед я больше не буду. Скажу лишь, что не стоит этого пугаться, и пока принимать все так как оно есть. В дальнейшем этой теме будут посвящены целые статьи. Давайте лучше перейдем к изучению типа TStringList.
В разделе var объявляется он следующим образом, впрочем как и обычные переменные:

1 var
2 s: TStringList;

Однако использовать весь функционал типа TStringList мы еще не можем. Это еще одна особенность этих «сложных» типов. Запомните, прежде чем работать с объектами таких типов (т.е. прежде чем работать с переменной s (в нашем случае)), необходимо сначала их создать. В разделе Var мы только объявляем переменные, но не создаем. А вот создать переменную (объект) — это значит присвоить ей какое-либо начальное значение и подготовить ее к работе. Если создание переменной типа integer осуществляется обыкновенным присвоением ей числа, то создание объекта (переменной) типа TStringList будет выглядеть следующим образом:

1 var
2 s: TStringList;
3 begin
4 s := TStringList.Create;
5 end;

«TStringList.Create» — это конструктор типа TStringList. Грубо говоря, это то, что нужно присвоить в качестве изначального значения новому экземпляру типа TStringList. И вот теперь уже доступны все возможности TStringList.

Хотите узнать, что будет если не создавать TStringList, да в общем-то и любой другой сложный объект, содержащий в себе параметры, процедуры, функции? Как только вы попробуете обратиться к любому свойству, параметру, процедуре или функции этого объекта, появится ошибка Access Violation. Поэтому не забывайте создавать объекты, прежде чем работать с ними.


Методы и параметры объектов типа TStringList
Методами объектов будем называть все процедуры и функции рассматриваемого типа объектов.
TStringList позволяет хранить строки как в отсортированном виде, так и в неотсортированном. Хоть сортировка строк в TStringList и не является востребованной возможностью, однако рассмотреть ее все-таки стоит. По умолчанию, сортировка в объекте TStringList выключена. Включить ее можно следующим образом:

1 s.Sorted:=True;

Как вы видите, у объекта типа TStringList существуют вложенные параметры и методы, и работать с последними можно также как и с параметрами и методами у обычных компонентов. На самом деле, разницы в устройстве между TButton (кнопкой) и TStringList нет. Их объединяет одно — что та кнопка, что TStringList являются обыкновенными объектами, просто эти объекты являются экземплярами разных типов (классов). Такие «сложные» типы, как TButton или TStringList грамотнее называть классами. Т.е. типы объектов, имеющие вложенные в них методы и параметры будем называть классами.
Продолжим изучение класса TStringList.

Для того, чтобы добавить строку в TStringList существует метод Add. В качестве единственного параметра ему необходимо передать переменную типа string:

1 s.Add('This is a string');

При этом создается новая строка, которая помещается сразу после предыдущих (если сортировка выключена).

Как я уже и говорил, TStringList — это массив строк. И действительно — к каждой строке TStringList можно обратиться по индексу (исчисляются эти индексы с нуля):

1 s.Add('This is a test');
2 s.Add('This is a second line');
3 showmessage(s[0]);
4 showmessage(s[1]);
5 s[0]:=s[0] + '123';

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

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

1 s.Delete(1);

Метод Clear позволяет полностью удалять все строки. Параметров у него нет.

Метод Count возвращает количество строк в объекте типа TStringList. Параметров ему тоже передавать не нужно.
Чтобы узнать индекс последней строки в TStringList, можно использовать метод count:

1 Last := s.count - 1;

Метод Find позволяет находить индекс Index указанной строки S. Возвращает в качестве результата True, если такая строка существует, или False, если такая строка не существует.

1 function TStringList.Find(const S: string; var Index: Integer): Boolean;

Метод IndexOf аналогичен методу Find, возвращает индекс искомой строки, или -1, если такой строки не существует.

Метод Insert вставляет определенную строку с определенным индексом. Выглядит он следующим образом:

1 procedure TStringList.Insert(Index: Integer; const S: string);

Метод Text не имеет никаких параметров. Он возвращает все строки целиком — в виде одной строки. В таком случае переводы между строками будут осуществляться символами с кодом #13, которые отображаются как переход на новую строку.

1 showmessage(s.text);

Метод LoadFromFile позволяет загрузить содержимое TStringList из файла. При этом каждая строка будет загружена по отдельности. Прежде чем загружать файл в TStringList, рекомендуется узнать существует ли он вообще. Делается это при помощи функции FileExists, которая возвращает true, если файл существует.

1 if FileExists('C:\textfile.txt') then
2 s.LoadFromFile('C:\textfile.txt');

Для сохранения содержимого TStringList в файл используется функция SaveToFile, которой нужно передать путь сохранения файла. Если такой файл уже существует, то он будет автоматически перезаписан.

Ну и напоследок, расскажу о методе Free. Служит этот метод для удаления самого объекта TStringList. При этом удалении происходит очистка оперативной памяти от содержимого удаляемого объекта. После такого удаления мы уже не сможем работать с самим объектом — только после того, как вновь его создадим.
 
Название темы
Автор Заголовок Раздел Ответы Дата
A Delphi. Урок 13. Работа со строками С/C++ 0
A Delphi для начинающих. Урок 10. Циклы. Работа с массивами С/C++ 0
A Delphi для начинающих – Урок 4 – Работа с переменными С/C++ 0
A Delphi. Урок 17. Типы С/C++ 0
A Delphi. Урок 16. Исключительные ситуации С/C++ 0
A Delphi. Урок 15. Математические операции С/C++ 0
A Delphi. Урок 12. Преобразование числа в строку и строки в число С/C++ 0
A Delphi для начинающих. Урок 11. Процедуры и функции С/C++ 0
A Delphi для начинающих – Урок 9 – Массивы С/C++ 0
A Delphi для начинающих – Урок 8 – Условия. Оператор Case С/C++ 0
A Delphi для начинающих – Урок 7 – Условия. Оператор IF С/C++ 0
A Delphi для начинающих – Урок 6 – Пишем свой калькулятор С/C++ 0
A Delphi для начинающих – Урок 5 – Работаем с компонентами С/C++ 0
A Delphi для начинающих – Урок 3 – Создание переменных С/C++ 0
A Delphi для начинающих – Урок 2 — События С/C++ 0
A Delphi для начинающих — Урок 1 — Среда разработки Delphi С/C++ 0
C Реверс-инжирниринг бота на Delphi, есть проблемы Вопросы и интересы 0
M [Delphi] Работа VKAPI, на примере бота С/C++ 3
T Пишем WinLocker на Delphi С/C++ 0
D Нужна помощь по Delphi! ЗАПЛАЧУ! Другие ЯП 1
VAVAN Продам исход стиллера (ЯП Delphi) Продажа софта 1
A Потоки в Delphi. TThread С/C++ 0
A Простые шутку в DELPHI С/C++ 5
A Мои старые исходники на Delphi С/C++ 1
A Несколько шпор по Delphi =) С/C++ 3
L Загружаем компьютер другу. Delphi,rad studio Другие ЯП 0
I Country IP Ranges Generator v1.0 [Source][Delphi] Другие ЯП 3
B Помощь [Delphi] Другие ЯП 0
B VK Post Grabber [Source][Delphi] Другие ЯП 0
Admin [delphi] downloader winapi Другие ЯП 0
Ж HTML/CSS, Урок 2 Другие ЯП 3
K Уроки по XSS: Урок 3. Контексты внедрения XSS Уязвимости и взлом 0
K Уроки по XSS: Урок 2. Скрытая передача данных, перехват нажатия клавиш, изменение внешнего вида сайта, подцепление на BeEF, фишинг, подсказки обхода ф Уязвимости и взлом 0
K Уроки по XSS: Урок 1. Основы XSS и поиск уязвимых к XSS сайтов Уязвимости и взлом 0
M Работа на выгодных условиях без особого труда. Предоставляю работу. Ищу специалиста. 0
M Работа для соискателей из РФ и РБ. Предоставляю работу. Ищу специалиста. 1
I Работа, разные рутинные задачи: постинг / переговоры / поиск Предоставляю работу. Ищу специалиста. 8
cheese Интересно Работа по РУ и СНГ Ищу работу. Предлагаю свои услуги. 1
L Работа Предоставляю работу. Ищу специалиста. 0
S Работа для всех Предоставляю работу. Ищу специалиста. 0
Dobermаnn Работа для дроповодов Предоставляю работу. Ищу специалиста. 0
F Работа для всех Предоставляю работу. Ищу специалиста. 0
C Набор в команду(Работа онлайн) Предоставляю работу. Ищу специалиста. 2
P Работа Корзина 2
K [Работа] - сотрудники Банков/гос.учреждений/сот.операторов Предоставляю работу. Ищу специалиста. 2
W Работа онлайн в команде Предоставляю работу. Ищу специалиста. 2
A Доброго времени суток! Разработаем сайт для сети onion/ зарегистрируем onion домен. Работа под ключ. Ищу работу. Предлагаю свои услуги. 1
M Набор сотрудников(Работа онлайн) Предоставляю работу. Ищу специалиста. 0
C Работа поиск форумов - Легально Предоставляю работу. Ищу специалиста. 2
K Работа онлайн в команде. Предоставляю работу. Ищу специалиста. 0

Название темы