TStringList-TStrings Tutorial/ru
Deutsch · English · Español · Français · Polski · Suomi · Русский
TStringList
TStringList (или его родитель, TStrings) очень похоже на динамический массив или набор строк (в FPC нету реализации набора строк). Он часто используется при программировании.
Простой пример
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 - Очищает список.
Расширенный пример
Как насчет более "сочного" примера, а?
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 откроет файл и добавить данных из файла в список строка за строкой.
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 имеет много других интересных особенностей:
- Позволяет отсортировать строки.
- Позволяет оставить в списке только уникальными строки.
- Можно получить все строки стразу использую свойство Text.
- Можно сохранить объект или другие данные вместе со строкой.
Чтобы узнать все процедуры, функции и свойства, посмотрите 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.