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

  • Автор темы HHIDE_DUMP
  • Дата начала
  • Просмотры 743
  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

HHIDE_DUMP

Гость
H

HHIDE_DUMP

Гость
В этом уроке мы рассмотрим новый тип данных 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. При этом удалении происходит очистка оперативной памяти от содержимого удаляемого объекта. После такого удаления мы уже не сможем работать с самим объектом — только после того, как вновь его создадим.
 

О нас

  • Наше сообщество существует уже много лет и гордится тем, что предлагает непредвзятое, критическое обсуждение различных тем среди людей разных слоев общества. Мы работаем каждый день, чтобы убедиться, что наше сообщество является одним из лучших.

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя