Delphi тип TStringList містить перелік змінної довжини, що складається з рядків.
Classes unit
type TStringList;
TStringList – корисний тип класу. Він надзвичайно корисний для багатьох видів обробки списків. Елементи у рядковому списку можуть бути вставлені, переміщені та відсортовані.
Список може бути сформований рядок за рядком, або завантажений з великого рядка розділеного комою або навіть з текстового файлу. TStringList походить від TStrings. Ви можете використовувати і TStrings, але це не рекомендується, оскільки він не повний – деякі з його методів абстрактні. TStringList здійснює ці абстрактні методи (Clear, Delete та Insert). Ми розглянемо основні властивості та методи TStringList, включаючи отримані з TStrings.
Властивість Count
Повертає кількість рядків у списку.
Властивість Capacity
Встановлює чи отримує поточну місткість рядкового списку. Ви можете керувати цією місткістю за потребою.
Властивість Strings
Отримує або коригує рядок за цим індексом у списку (перший елемент списку має індекс 0).
Зверніть увагу, що властивість Strings є властивістю за замовчуванням. Це означає, що ви можете використовувати її без його вказівки:
myName := names.Strings[4];
є еквівалентним:
myName := names[4];
Властивість Text
Встановлює або отримує список як великий рядок. Цей рядок міститиме кожний рядок, що закінчується комбінацією символів перекладу каретки та перекладу рядка (CRLF). Корисно для завантаження з візуального об'єкта, який може містити багато рядків тексту.
Властивість CommaText
Отримує або встановлює список як великий рядок. Цей рядок матиме список рядків розділених комами. Це корисно для завантаження експорту текстової електронної таблиці. Якщо при отриманні рядок містить вкладені простори, він буде поміщений у подвійні лапки.
Властивість DelimitedText
Отримує або встановлює список через великий рядок. Цей рядок містить список рядків розділених значенням Delimiter (за замовчуванням – кома). Рядки, що містять вкладені пробіли, повинні бути вкладені в QuoteChar (за замовчуванням - ").
Властивість QuoteChar
Використовується для замикання рядків, які мають вкладені пропуски під час використання DelimitedText.
Властивість Delimiter
Використовується для поділу рядків під час використання DelimitedText.
Властивість Names
Рядки у рядковому списку можуть бути оброблені як пари назва/значення, як у другому прикладі коду. Кожен рядок не повинен мати жодних впроваджених прогалин, і містити знак =. Це дуже корисне поняття. Див. властивості Value і ValueFromIndex, та метод IndexOfName.
Властивість Values
Повертає значення для цієї назви, коли використовуються рядки пари назва/значення (див. вище).
Властивість ValueFromIndex
Повертає значення індексу рядка (починається з 0), коли використовуються пари назва/значення.
Властивість CaseSensitive
Коли true, Delphi обробляє рядки чутливо до регістру під час виконання деяких операцій, таких як Sort.
Властивість Duplicates
Ця властивість може мати одне з наступних перерахованих TDuplicates значень:
- dupIgnore ігнорує (відкидає) дублікати.
- dupAccept дозволяють дублікати.
- dupError викидає виняток, якщо є дублікати.
Властивість Sorted
Коли true, всі рядки будуть додаватися до своєї позиції відсортованої послідовності. Коли false, вони додаватимуться в кінець. Див. також метод Sort.
Властивість Objects
Повертає об'єкт, пов'язаний із рядком за цим індексом, якщо він існує.
Метод Add
Додає цей рядок до списку, повертаючи його позицію у списку (починається з 0).
Метод Append
Так само як і Add, але без повернення індексного значення.
Метод Insert
Вставляє рядок у задану індексом позицію. Позиція 0 викличе вставку на початок.
Метод Delete
Видаляє рядок за цим індексом.
Метод Clear
Видаляє всі рядки зі списку.
Метод Move
Переміщує рядок з однієї позиції до іншої, зсуваючи інші рядки відповідно.
Метод Exchange
Переставляє два рядки у списку, ідентифіковані за їх індексними позиціями.
Метод IndexOf
Отримує індекс позиції рядка у списку відповідного даного рядка. Якщо рядок не знайдено, то повертається -1.
Метод IndexOfName
Отримує індекс позиція першої пари назва/значення рядка, де назва відповідає даному рядку. Якщо не знайдено – повертається -1.
Метод Find
Те саме, що й IndexOf, але з використанням списків сортованих рядків.
Метод Sort
Якщо Sorted є помилковим, то це викличе сортування списку.
Метод AddStrings
Додає рядки з іншого списку.
Метод Assign
Замінює поточний список змістом іншого списку.
Метод LoadFromFile
Дуже корисний метод, що завантажує рядковий список з текстового файлу. Кожен текстовий рядок (закінчений CRLF - див. DelimitedText) стає рядком списку.
Метод SaveToFile
Зберігає рядковий список у текстовий файл.
Тип TStringList в Delphi: Простий приклад коду
var
animals : TStringList; // Визначення нашої змінної списку рядків
i : Integer;
begin
// Визначення об'єкта списку рядків та вказівка нашої змінної на нього
animals := TStringList.Create;
// Тепер додаємо кілька назв до нашого списку
animals.Add('Cat');
animals.Add('Mouse');
animals.Add('Giraffe');
// Тепер показуємо цих тварин
for i := 0 to animals.Count-1 do
ShowMessage(animals[i]); // animals[i] еквівалентно animals.Strings[i]
end;
Результат
Cat
Mouse
Giraffe
Тип TStringList в Delphi: Використання рядків назва-значення
var
names : TStringList; // Визначення нашої змінної списку рядків
ageStr : String;
i : Integer;
begin
// Визначення об'єкта списку рядків та вказівка нашої змінної на нього
names := TStringList.Create;
// Тепер додаємо кілька назв до нашого списку
names.CommaText := 'Neil=45, Brian=63, Jim=22';
// І тепер знаходимо вік Брайєна
ageStr := names.Values['Brian'];
// Показ цього значення
ShowMessage('Вік Brian'а = '+ageStr);
// Тепер відображаємо всі імена та значення віку
for i := 0 to names.Count-1 do
begin
ShowMessage(names.Names[i]+' - '+names.ValueFromIndex[i]);
end;
end;
Результат
Вік Brian'а 63
Neil - 45
Brian - 63
Jim - 22
Тип TStringList в Delphi: Використання DelimitedText, Delimiter та QuoteChar
var
cars : TStringList; // Визначення нашої змінної списку рядків
i : Integer;
begin
// Визначення об'єкта списку рядків та вказівка нашої змінної на нього
cars := TStringList.Create;
// Тепер додаємо кілька значень до нашого списку – використовуючи властивість DelimitedText із заміною керуючих змінних
cars.Delimiter := ' '; // Кожен елемент списку буде розділений пробілом
cars.QuoteChar := '|'; // І кожен елемент взятий в '|'
cars.DelimitedText := '|Honda Jazz| |Ford Mondeo| |Jaguar "E-type"|';
// Тепер показуємо ці автомобілі
for i := 0 to cars.Count-1 do
ShowMessage(cars[i]); // cars[i] еквівалентно cars.Strings[i]
end;
Результат
Honda Jazz
Ford Mondeo
Jaguar "E-type"
Подібні функції, процедури та команди
AnsiString — тип даних, що містить рядок AnsiChar.
Array — тип даних, що містить індексовану колекцію даних.
String — тип даних, що містить рядок символів.
TList — універсальний контейнер списків об'єктів.
