Клас TStringList, Різне, Програмування, статті

Сьогодні я розповім про клас TStringList, який є заміною масивів з елементів типу string і надає набір функцій для роботи з масивом рядків. Цей тип так само дозволяє зберігати список рядків в текстовий файл, і завантажувати список з текстового файлу. Цей клас є повною заміною старих функцій по роботі з текстовими файлами Read (Ln) і Write (Ln). Ця стаття в першу чергу для чайників – Всім чайникам не відриватися від екрану, і не відволікатися на інші речі! Але професіоналам не завадить “чітануть” цю статтю. Фактично ця стаття це майже повний мануал по класу TStringList.

Почнемо спочатку. Спочатку “родовід” класу:

TStringList = class(TStrings)
TStrings = class(TPersistent)
TPersistent = class(TObject)


Клас TStrings є абстрактним класом, всі ключові властивості та методи абстрактні, тобто оголошені як abstract, і вимагають обов’язкового переоб’явленія класах нащадках, що і зроблено в класі TStringList.
Для того щоб можна було працювати з цим класом, треба створити екземпляр цього
класу – об’єкт. Створення об’єкта TStringList:


Var
 STR: TStringList;
Begin
 STR:= TStringList.Create;


Отже, об’єкт створений. Для додавання рядка використовується метод Add єдиним параметром, якого є додається рядок. Рядок буде додана після самої останнього рядка. Теж саме робить метод Append. Для того щоб вставити рядок у певну позицію треба використовувати функцію Insert.
procedure Insert(Index: Integer; const S: string); override;
параметр Index задає позицію додається рядки, якщо вказати 0, то рядок буде найпершою, якщо 1, то рядок буде другий. Зрозуміло нумерація з нуля. Рядок, яка стоїть на цій позиції буде зрушена вперед. Не можна вказувати індекс рядка більше ніж рядків в списку, відбудеться виняток. Ну і для видалення рядка використовується функція Delete, в якості єдиного параметра якої треба вказувати індекс рядка для видалення. Весь список рядків надається властивістю-масивом Strings. Воно доступне як для читання так і для зміни. Використовується це властивість так:
ShowMessage(STR.Strings[1]);
виведеться другий рядок в масиві. Опис властивості


property Strings[Index: Integer]: string read Get write Put;
default;


Звідси видно, що воно властивість за замовчуванням. Тому його можна не вказувати можна просто:
ShowMessage(STR[5]);
Для отримання кількості елементів використовується функція Count, яка повертає кількість елементів у списку. Весь список очищується за допомогою методу Clear.
Для отримання індексу рядка використовується функція IndexOf, яка приймає рядок, і повертає індекс рядка, якщо результат -1, рядок не знайдена. Властивість CaseSensitive задає чутливість до регістру символів при пошуку, якщо False, то великі і малі літери це одне і те ж при пошуку та інших операціях.
Для того щоб поміняти місцями два рядки є метод Exchange, якій треба передати два числа які задають індекси рядків. Для переміщення рядка на нову позицію використовується функція Move, передавши їй індекс рядка для переміщення і індекс нової позиції.
TStringList дозволяє сортувати список в алфавітному порядку. Для сортування всього списку в алфавітному порядку треба викликати метод Sort або привласнити властивості Sorted значення True. Після сортування назад повернути рядки на свої місця неможливо. Різниця між цими методами сортування в тому, що метод Sort просто сортує список, а при присвоєнні властивості значення True, кожне додається значення буде сортуватися, і скористатися методом Insert буде неможливо – буде генеруватися виняток. Так само не можна використовувати функції Exchange і Move. Для відсортованих списків рекомендується використовувати функцію Find для пошуку рядка. Ця функція повертає True, якщо рядок знайдена. Приклад:


if str.Find(“222′,i) then
 ShowMessage(IntToStr(i));


Другим параметром треба передавати змінну, в яку функція збереже індекс знайденої рядка. Для контролю додаються значень в відсортований список використовується властивість Duplicates.


TDuplicates = (dupIgnore, dupAccept, dupError);


Якщо зазначено dupAccept, то контролю немає. Якщо зазначено dupError, то при додаванні рядка яка вже є, буде генеруватися виняток. Якщо зазначено dupIgnore, то при додаванні рядка, який вже Тобто, вона не буде додаватися.
Для додавання групи рядків використовується функція AddStrings, яка приймає об’єкт TStrings або TStringList. Приклади:


Memo1.Lines.AddStrings(STR);
Memo1.Lines.AddStrings(Memo2.Lines);


Для того щоб зберегти список у файл використовується функція SaveToFile, яка приймає шлях до файлу. Відповідно для завантаження з текстового файлу треба викликати функцію LoadFromFile з таким же параметром.
Для порівняння списку з іншим списком треба викликати функцію Equals і передати їй в якості єдиного параметра об’єкт типу TStrings або TStringList. Приклад:


if Memo1.Lines.Equals(Memo2.Lines) then
ShowMessage (“Чи збігаються”);
Або
if STR.Equals(STR1) then
ShowMessage (“Чи збігаються”);


Функція GetText повертає весь список у вигляді єдиного тексту в якості свого результату (результат має тип PChar). Що робить SetText я думаю вже зрозуміло. Властивість Text доступно як для читання, так і для запису дозволяє працювати з усім списком у вигляді єдиного тексту як з одним рядком.
Властивість DelimitedText дозволяє конвертувати список в єдиний текст з роздільниками. Розпинатися не буду, наведу приклад. Наприклад, є список:


Stri,ng 1
Stri”ng 2
String 3
String4


Властивість CommaText буде мати значення:
“Stri,ng 1″,”Stri””ng 2″,”String 3”,String4
Символ роздільник задається символом властивістю Delimiter, а символ лапок задається властивістю QuoteChar. Властивість CommaText дозволяє конвертувати список в SDF – System Data Format. Це теж саме що використовувати властивість DelimitedText, з властивістю Delimiter рівним “,” і QuoteChar рівним “” “. При присвоєнні значення цим властивостям вони поводяться однаково. Наприклад,
присвоюється:


“Stri,ng 1”, “Stri””ng 2” , String 3,String4
вийде:
Stri,ng 1
Stri”ng 2
String
3
String4


Під кінець я розповім найбільш примітну можливість цього класу. Це можливість роботи зі списками типу ім’я-значення.
Наприклад, є список
First=12222
Second=4444
Third=3333
Тоді властивість STR.Names [1] поверне “Second”. Властивість STR.Values ​​[“Second”] буде мати значення “4444”. Ну як, сенс вловили? Символ роздільника задає властивість NameValueSeparator, можна використовувати списки з будь-якими роздільниками. Якщо в рядку два роздільника, то ім’ям є підрядок до першого роздільника. Також є властивості ValueFromIndex, IndexOfName з ними я думаю, ви самі розберетеся.
Ось і кінець. Я думаю, що ви відчули силу. Клас TStringList спрощує багато операцій при роботі з рядками.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*