Sign in Join
Wiki copytemporary

TStringList-TStrings Tutorial/ru

Deutsch · English · Español · Français · Polski · Suomi · Русский

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.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.