Sign in Join
Wiki copytemporary

Revision 1 of 1, by Zoltanleo on 9-25-2019. The page as it is now.

TStringList-TStrings Tutorial/ru

TStringList

TStringList (или его родитель, TStrings) очень похоже на динамический массив или набор строк (в FPC нету реализации набора строк). Он часто используется при программировании.

Простой пример

pascal
program StrList;
{$mode objfpc}
uses
 Classes, SysUtils;
var
  Str: TStringList;
begin
  Str := TStringList.Create; // Это необходимо при использовании этого 
                             // класса (как и большинства классов)
  Str.Add('Some String!');
  Writeln('StringList содержит ' + IntToStr(Str.Count) + ' строк.');
  Readln;
  Str.Free; //Освобождение памяти, занятой классом
end.

Это простая консольная программа, которая добавляет одну строку и выводит количество строк. Некоторые вещи, которые вы должны знать:

Create - Создаст список строк для изменения. Если вы вызвали Create, в конце вы должны вызвать Free для освобождения занимаемой памяти. Если этого не сделать, то программа не рухнет, но вся память освобождена не будет, что приведет к утечке памяти.

Count - Это свойство возвращает текущее количество строк.

Add - Этот метод добавляет одну строку в StringList. Он возвращает Индекс добавленной строки.

Delete - Удаляет строку из StringList. Для удаления строки, нужно ввести её индекс. Как я уже говорил: это как динамический массив.

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

Clear - Очищает список.

Расширенный пример

Как насчет более "сочного" примера, а?

pascal
program StrList2;
{$mode ObjFPC}
uses
Classes, SysUtils;

var
  Str: TStringList;
  S: string;
  Counter: Integer;
begin
  Str := TStringList.Create;
  Writeln('String List Test');
  repeat
    Writeln('Enter a string to add');
    Readln(S); 
    if (S = 'EXIT') then Halt; //Немедленное завершение программы
    //Если вы внимательно посмотрите, то увидите, что это приводит к утечке памяти.
    if (S <> '') then
    begin
      Counter := Str.Add(S);
      Writeln('String: ' + S + ' was Added!');
      Writeln('Index is: ' + IntToStr(Counter)); // Counter будет всегда равен 
                                                 // индексу последнего добавленного элемента.
    end 
    else 
    begin
      Writeln('No data entered...');
    end;
  until (S = 'EXIT');
  Str.Free; // Освобождение занятой памяти
end.

Обработка файлов

При использовании TStringList, у вас есть две процедуры для работы с файлами: SaveToFile и LoadFromFile. SavetoFile сохранит все строки в файл. LoadFromFile откроет файл и добавить данных из файла в список строка за строкой.

pascal
program StrListFile;
{$mode objfpc}
uses
 Classes, SysUtils;

var
  Str: TStringList;
begin
  Str := TStringList.Create;
  Str.LoadFromFile('SomeFile.txt');
  Str.Add('Hello');
  Str.SaveToFile('SomeFile.txt');
  Str.Free;
end.

Вы только что открыли файл, отредактировали его и сохранили обратно!

Сравнение динамических массивов и TStringList

TStringList это просто усовершенствованная версия динамического массива. Некоторые методы имеют сходства:

Операция array of string TStringList
Объявление переменной StringList: array of string; StringList: TStringList;
Инициализация неявный конструктор StringList := TStringList.Create
Установка размера SetLength(StringList, X); StringList.Size := X;
Получение размера X := Length(StringList); X := StringList.Count;
Добавление пункта SetLength(StringList, Length(StringList) + 1); StringList[Length(StringList) - 1] := X; StringList.Add(X);
Удаление пункта for I := Index to Length(StringList) - 2 do StringList[I] := StringList[I + 1]; SetLength(StringList, Length(StringList) - 1); StringList.Delete(Index);
Удаление всех пунктов SetLength(StringList, 0); StringList.Clear;
Завершение неявный деструктор StringList.Free;

Но TStringList предлагает гораздо больше возможностей, чем базовая структура, такая как динамический массив.

Продолжайте учиться

TStringList имеет много других интересных особенностей:

  1. Позволяет отсортировать строки.
  2. Позволяет оставить в списке только уникальными строки.
  3. Можно получить все строки стразу использую свойство Text.
  4. Можно сохранить объект или другие данные вместе со строкой.

Чтобы узнать все процедуры, функции и свойства, посмотрите TStringList documentation... или справку в Lazarus.


From the Free Pascal wiki, page "TStringList-TStrings Tutorial/ru", as it stood on 2019-09-25 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.