School Ghost_mod
У цьому уроці ми розглянемо новий тип даних TStringList, який містить список рядків типу string.
Іншими словами, TStringList - це масив рядків, який має цілу низку різних можливостей, що дозволяють проводити різні операції над рядками. TStringList є не просто змінною, які ми з вами розбирали в попередніх уроках (integer, string і т.п.). Змінна типу TStringList - це об'єкт, який безпосередньо в собі забезпечений певними функціями, процедурами та параметрами. Фактично, виглядає це все як і у звичайного компонента (присутні «вбудовані» функції, процедури, параметри), а якщо забігти трохи вперед, то компоненти це і є такі ж змінні (прямо як і TStringList і навіть integer), хоча буде набагато грамотніше їх називати саме об'єктами. Але поки ми ще не повністю усвідомлюємо структуру об'єктів у Delphi, забігати вперед я більше не буду. Скажу лише, що не варто цього лякатися, і поки що приймати все так, як воно є. Надалі цій темі буде присвячено цілі статті. Давайте краще перейдемо до вивчення типу TStringList. У розділі var оголошується він так, втім як і звичайні змінні:
Однак, використовувати весь функціонал типу TStringList ми ще не можемо. Це ще одна особливість цих складних типів. Запам'ятайте, перш ніж працювати з об'єктами таких типів (тобто, перш ніж працювати зі змінною s (у нашому випадку)), необхідно спочатку їх створити. У розділі Var ми тільки оголошуємо змінні, але не створюємо. А ось створити змінну (об'єкт) - це означає привласнити їй якесь початкове значення і підготувати її до роботи. Якщо створення змінної типу integer здійснюється звичайним присвоєнням їй числа, створення об'єкта (змінної) типуTStringList буде виглядати так:
s:=TStringList. Create;
"TStringList.Create" - це конструктор типу TStringList. Грубо кажучи, це те, що потрібно присвоїти як початкове значення новому екземпляру типу TStringList. І ось тепер доступні всі можливості TStringList. Хочете дізнатися, що буде якщо не створювати TStringList, та загалом і будь-який інший складний об'єкт, що містить у собі параметри, процедури, функції? Як тільки ви спробуєте звернутися до будь-якої властивості, параметра, процедури або функції цього об'єкта, з'явиться помилка Access Violation. Тому не забувайте створювати об'єкти, перш ніж працювати з ними.
Методами об'єктів будемо називати всі процедури і функції типу об'єктів, що розглядається. TStringList дозволяє зберігати рядки як у відсортованому вигляді, так і в невідсортованому. Хоч сортування рядків у TStringList і не є затребуваною можливістю, проте розглянути його все-таки варто. За умовчанням, сортування в об'єкті TStringList вимкнено. Включити її можна так:
Як ви бачите, у об'єкта типу TStringList існують вкладені параметри та методи, і працювати з останніми можна також як і з параметрами та методами у звичайних компонентів. Насправді різниці в пристрої між TButton (кнопкою) і TStringList немає. Їх поєднує одне — що та кнопка, що TStringList є звичайними об'єктами, ці об'єкти є екземплярами різних типів (класів). Такі «складні» типи, як TButton або TStringList, грамотніше називати класами. Тобто. типи об'єктів, що мають вкладені в них методи та параметри називатимемо класами. Продовжимо вивчення класу TStringList. Для того, щоб додати рядок до TStringList існує метод Add. Як єдинийпараметра йому необхідно передати змінну типу string:
При цьому створюється новий рядок, який міститься відразу після попередніх (якщо сортування вимкнено).
Як я вже й казав, TStringList – це масив рядків. До кожного рядка TStringList можна звернутися за індексом (обчислюються ці індекси з нуля):
s. Add ( 'This is a test');
s. Add ( 'This is a second line');
showmessage (s[0]);
showmessage (s[1]);
s[0]: = s[0] + '123';
Звертатися до неіснуючого індексу не можна, навіть якщо ви хочете надати неіснуючому індексу значення.
Для видалення одного рядка з певним індексом можна використовувати метод Delete. Як єдиний параметр йому необхідно передати індекс рядка, що видаляється.
Метод Clear дозволяє повністю видаляти усі рядки. Параметрів він не має.
Метод Count повертає кількість рядків в об'єкті типу TStringList. Параметрів йому теж не треба передавати. Щоб дізнатися індекс останнього рядка в TStringList, можна використовувати метод count:
Метод Find дозволяє знаходити індекс Index зазначеного рядка S. Повертає як результат True, якщо такий рядок існує, або False, якщо такий рядок не існує.
Метод IndexOf аналогічний методу Find, повертає індекс рядка, що шукається, або -1, якщо такого рядка не існує.
Метод Insert вставляє певний рядок із певним індексом. Виглядає він так:
Метод Text не має жодних параметрів. Він повертає всі рядки цілком - у вигляді одного рядка. У такому разі переклади між рядками будуть здійснюватись символами з кодом #13, які відображаються як перехід на новий рядок.
Метод LoadFromFile дозволяєзавантажити вміст TStringList із файлу. При цьому кожен рядок буде завантажено окремо. Перш ніж завантажувати файл у TStringList, рекомендується дізнатися чи існує він взагалі. Це робиться за допомогою функції FileExists, яка повертає true, якщо файл існує.
if FileExists ( 'C:\textfile.txt' ) then
s. LoadFromFile ( 'C:\textfile.txt');
Для збереження вмісту TStringList у файл використовується функція SaveToFile, яку потрібно передати шлях збереження файлу. Якщо такий файл вже існує, він буде автоматично перезаписаний.
Ну і насамкінець, розповім про метод Free. Служить цей метод видалення самого об'єкта TStringList. При цьому видаленні відбувається очищення оперативної пам'яті від вмісту об'єкта, що видаляється. Після такого видалення ми вже не зможемо працювати з самим об'єктом — тільки після того, як його знову створимо.