AVZ 5. Руководство пользователя
×

16.36.1. Класс TStringList

Для работы с текстовыми файлами и массивами строк в скриптовом языке поддерживается класс TStringList, практически идентичный аналогичному классу в Delphi. Данный класс позволяет:
  • Создавать списки строк и осуществлять их обработку;
  • Производить поиск строк и сортировку;
  • Работать с текстовыми файлами;
  • Осуществлять особую обработку массивов строк вида "имя=значение" (т.н. данные вида KV - Key=Value);
 
 
Методы:
 
constructor Create;
Создает экземпляр класса. Попытка работы с экземпляром класса до его создания или после разрушения приведет к ошибке.
 
destructor Free;
Разрушает экземпляр класса, освобождает все занятые им ресурсы.
 
function Add(const S: string): Integer;
Добавляет строку к списку, возвращаемое значение - позиция элемента в списке (позиция отсчитывается от 0).
 
procedure Append(const S: string);
Аналогично Add, но не возвращает позицию добавленного элемента
 
procedure Clear;
Очищает список строк
 
procedure Delete(Index: Integer);
Удаляет строку с указанным индексом. Указание недопустимого индекса является ошибкой
 
procedure Move(CurIndex, NewIndex: Integer); virtual;
Перемещает элемент CurIndex в позицию NewIndex. Указание недопустимого индекса является ошибкой
 
function IndexOf(const S: string): Integer;
Поиск указанной строки в массиве. Если строка найдена, то возвращается ее индекс, если не найдена - значение -1.
 
procedure Insert(Index: Integer; const S: string);
Вставляет строку по указанному индексу (раздвигая массив). Например, Insert(0, 'First string !') вставит текст 'First string !' в начало массива строк
 
procedure LoadFromFile(const FileName: string);
Загружает текстовый файл с именем FileName в список строк. Имеющиеся при этом в списке данные затираются.
 
procedure SaveToFile(const FileName: string);
Загружает список строк в текстовый файл с именем FileName. Имеющиеся при этом в списке данные не изменяются.
 
Свойства
 
property Count: Integer;
Возвращает текущее количество строк в списке. Допускает только чтение.
 
property Values[const Name: string]: string;
Возвращает значение по заданному ключу Name. Работает в случае, если в массиве строк данные представлены в виде пар ключ=значение. Допускает чтение и запись. Если заданный ключ не будет найден в списке строк, то вернет пустую строку. Первое присвоение приведет к созданию соответствующей пары "ключ=значение", последующие - к ее модификации. По сути, это позволяет использовать TStringList в качестве ассоциативного массива, что удобно для ряда задач, в частности - создания профилей настроек, собственных баз и т.п.. Разделителем пары "ключ=значение" является знак "=".
На заметку: при загрузке данных из файла, в случае добавления срок при помощи функции Add или присвоения значения свойству CommaText корректность пар ключ=значение, равно как отсутствие повторов никак не проверяется. Для корректного использования данного класса в качестве ассоциативного массива следует после создания экземпляра класса работать с ними исключительно через свойство Values, не используя напрямую методы Add или Insert.
 
Пример: 
 var
 List : TStringList;
begin
 List := TStringList.Create;
 List.Values['x'] := '123';
 List.Values['y'] := 'test';
 List.Values['x'] := '456';
 AddToLog('x='+List.Values['x']);
 AddToLog('y='+List.Values['y']);
 List.Free;
end.
 
property CommaText: string;
Позволяет работать с представлением содержимого TStringList в виде строки с разделителями, допускает чтение и запись (в случае записи производится разбиение строки по символу разделителю ','). В случае, если строка содержит разделитель, она заключается в кавычки при чтении, при записи разделители внутри заключенной в кавычки строки игнорируются.
 
Пример:
var
 List : TStringList;
begin
 List := TStringList.Create;
 List.CommaText := 'x=111,"y=0,0,0"';
 AddToLog('x='+List.Values['x']);
 AddToLog('y='+List.Values['y']);
 AddToLog('CommaText='+List.CommaText);
 List.Free;
end.
 
property Text: string;
Позволяет работать с представлением содержимого TStringList в виде строки. Разделителем строк внутри такой строки будут стандартные символы перевода строки. Допускает как чтение, так и запись, что в частности удобно в случае, если требуется скопировать все строки из одного TStringList  в другой.