Sign in Join
Wiki copytemporary

TStringList-TStrings Tutorial/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TStringList-TStrings Tutorial/ru

OldNewLine
1+## TStringList
2+
3+TStringList (или его родитель, TStrings) очень похоже на динамический массив или набор строк (в FPC нету реализации набора строк). Он часто используется при программировании.
4+
5+### Простой пример
6+
7+``` pascal
8+program StrList;
9+{$mode objfpc}
10+uses
11+ Classes, SysUtils;
12+var
13+ Str: TStringList;
14+begin
15+ Str := TStringList.Create; // Это необходимо при использовании этого
16+ // класса (как и большинства классов)
17+ Str.Add('Some String!');
18+ Writeln('StringList содержит ' + IntToStr(Str.Count) + ' строк.');
19+ Readln;
20+ Str.Free; //Освобождение памяти, занятой классом
21+end.
22+```
23+
24+Это простая консольная программа, которая добавляет одну строку и выводит количество строк. Некоторые вещи, которые вы должны знать:
25+
26+**Create** - Создаст список строк для изменения. Если вы вызвали **Create**, в конце вы должны вызвать **Free** для освобождения занимаемой памяти. Если этого не сделать, то программа не рухнет, но вся память освобождена не будет, что приведет к утечке памяти.
27+
28+**Count** - Это свойство возвращает текущее количество строк.
29+
30+**Add** - Этот метод добавляет одну строку в StringList. Он возвращает **Индекс** добавленной строки.
31+
32+**Delete** - Удаляет строку из StringList. Для удаления строки, нужно ввести её индекс. Как я уже говорил: это как динамический массив.
33+
34+**IndexOf** - Возвращает индекс строки в списке. Если строка не найдена, вернет -1.
35+
36+**Clear** - Очищает список.
37+
38+### Расширенный пример
39+
40+Как насчет более "сочного" примера, а?
41+
42+``` pascal
43+program StrList2;
44+{$mode ObjFPC}
45+uses
46+Classes, SysUtils;
47+
48+var
49+ Str: TStringList;
50+ S: string;
51+ Counter: Integer;
52+begin
53+ Str := TStringList.Create;
54+ Writeln('String List Test');
55+ repeat
56+ Writeln('Enter a string to add');
57+ Readln(S);
58+ if (S = 'EXIT') then Halt; //Немедленное завершение программы
59+ //Если вы внимательно посмотрите, то увидите, что это приводит к утечке памяти.
60+ if (S <> '') then
61+ begin
62+ Counter := Str.Add(S);
63+ Writeln('String: ' + S + ' was Added!');
64+ Writeln('Index is: ' + IntToStr(Counter)); // Counter будет всегда равен
65+ // индексу последнего добавленного элемента.
66+ end
67+ else
68+ begin
69+ Writeln('No data entered...');
70+ end;
71+ until (S = 'EXIT');
72+ Str.Free; // Освобождение занятой памяти
73+end.
74+```
75+
76+## Обработка файлов
77+
78+При использовании TStringList, у вас есть две процедуры для работы с файлами: **SaveToFile** и **LoadFromFile**. SavetoFile сохранит все строки в файл. LoadFromFile откроет файл и добавить данных из файла в список строка за строкой.
79+
80+``` pascal
81+program StrListFile;
82+{$mode objfpc}
83+uses
84+ Classes, SysUtils;
85+
86+var
87+ Str: TStringList;
88+begin
89+ Str := TStringList.Create;
90+ Str.LoadFromFile('SomeFile.txt');
91+ Str.Add('Hello');
92+ Str.SaveToFile('SomeFile.txt');
93+ Str.Free;
94+end.
95+```
96+
97+Вы только что открыли файл, отредактировали его и сохранили обратно!
98+
99+## Сравнение динамических массивов и TStringList
100+
101+TStringList это просто усовершенствованная версия динамического массива. Некоторые методы имеют сходства:
102+
103+| Операция | array of string | TStringList |
104+|----|----|----|
105+| Объявление переменной | StringList: array of string; | StringList: TStringList; |
106+| Инициализация | неявный конструктор | StringList := TStringList.Create |
107+| Установка размера | SetLength(StringList, X); | StringList.Size := X; |
108+| Получение размера | X := Length(StringList); | X := StringList.Count; |
109+| Добавление пункта | SetLength(StringList, Length(StringList) + 1); StringList\[Length(StringList) - 1\] := X; | StringList.Add(X); |
110+| Удаление пункта | for I := Index to Length(StringList) - 2 do StringList\[I\] := StringList\[I + 1\]; SetLength(StringList, Length(StringList) - 1); | StringList.Delete(Index); |
111+| Удаление всех пунктов | SetLength(StringList, 0); | StringList.Clear; |
112+| Завершение | неявный деструктор | StringList.Free; |
113+
114+Но TStringList предлагает гораздо больше возможностей, чем базовая структура, такая как динамический массив.
115+
116+## Продолжайте учиться
117+
118+TStringList имеет много других интересных особенностей:
119+
120+1. Позволяет отсортировать строки.
121+2. Позволяет оставить в списке только уникальными строки.
122+3. Можно получить все строки стразу использую свойство **Text**.
123+4. Можно сохранить объект или другие данные вместе со строкой.
124+
125+Чтобы узнать все процедуры, функции и свойства, посмотрите [TStringList documentation](http://www.freepascal.org/docs-html/rtl/classes/tstringlist.html)... или справку в Lazarus.
126+
127+---
128+*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](/wiki-contact).*
129+Category: FPC/ru
130+Category: Russian
131+Category: Tutorials/ru

Back to history