Difference between revisions of "TStringList-TStrings Tutorial/ru"

From Lazarus wiki
Jump to navigationJump to search
(Перевод)
 
 
(5 intermediate revisions by 3 users not shown)
Line 5: Line 5:
  
 
===Простой пример===
 
===Простой пример===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
program StrList;
 
program StrList;
 
{$mode objfpc}
 
{$mode objfpc}
Line 25: Line 25:
 
Некоторые вещи, которые вы должны знать:
 
Некоторые вещи, которые вы должны знать:
  
'''Create''' - Создаст список строк для изменения. Если вы вызвали '''Create''', в конце вы должны вызвать ''Free''' для освобождения занимаемой памяти. Если этого не сделать, то программа не рухнет, но вся память освобождена не будет, что приведет к утечке памяти.
+
'''Create''' - Создаст список строк для изменения. Если вы вызвали '''Create''', в конце вы должны вызвать '''Free''' для освобождения занимаемой памяти. Если этого не сделать, то программа не рухнет, но вся память освобождена не будет, что приведет к утечке памяти.
  
 
'''Count''' - Это свойство возвращает текущее количество строк.
 
'''Count''' - Это свойство возвращает текущее количество строк.
Line 41: Line 41:
 
Как насчет более "сочного" примера, а?
 
Как насчет более "сочного" примера, а?
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
program StrList2;
 
program StrList2;
 
{$mode ObjFPC}
 
{$mode ObjFPC}
Line 81: Line 81:
 
LoadFromFile откроет файл и добавить данных из файла в список строка за строкой.
 
LoadFromFile откроет файл и добавить данных из файла в список строка за строкой.
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
program StrListFile;
 
program StrListFile;
 
{$mode objfpc}
 
{$mode objfpc}
Line 98: Line 98:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Вы только что открыли файл, отредактировать его и сохранить ее обратно!
+
Вы только что открыли файл, отредактировали его и сохранили обратно!
  
 
==Сравнение динамических массивов и TStringList==
 
==Сравнение динамических массивов и TStringList==
Line 136: Line 136:
 
Чтобы узнать все процедуры, функции и свойства, посмотрите [http://www.freepascal.org/docs-html/rtl/classes/tstringlist.html TStringList documentation]... или справку в Lazarus.
 
Чтобы узнать все процедуры, функции и свойства, посмотрите [http://www.freepascal.org/docs-html/rtl/classes/tstringlist.html TStringList documentation]... или справку в Lazarus.
  
[[Category:Tutorials]]
+
 
[[Category:FPC]]
+
{{AutoCategory}}
 +
[[Category:FPC/ru]]
 +
[[Category:Tutorials/ru]]

Latest revision as of 10:32, 25 September 2019

Deutsch (de) English (en) español (es) suomi (fi) français (fr) polski (pl) русский (ru)

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 имеет много других интересных особенностей:

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

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