Мета роботи: Вивчити основи роботи з рядковими типами даних. Оволодіти навичками запису та зчитування даних при роботі з об’єктом RichTextBox.
У багатьох мовах програмування рядки – представлені у вигляді масиву символів, але в C# рядки є об’єктами. Тип даних string у C# є типом-посилання. Текстові дані в C# представлені вбудованими типами даних string і char. Тип char надає можливість зберігати елемент символьних даних у системі кодування Unicode. Клас Char містить набір статичних методів, які надають додаткову функціональність для роботи з символами.
Об’єкти класу рядкового типу оголошуються як і всі інші об’єкти простих типів – з явною або неявною ініціалізацією, з явним або неявним викликом конструктора класу. Найчастіше при оголошенні змінної рядкового типу конструктор явно не викликається, а ініціалізація задається рядковою константою.
Також існує велика кількість варіантів оголошення рядків:
string s; // оголошення без ініціалізації
string s=''економічна кібернетика''; //оголошення з //ініціалізацією
string s=@''ЕММ-
економіко-математичне моделювання '';
// символ @ повідомляє конструктор string, що рядок потрібно // сприймати дослівно,навіть якщо він може займати декілька // рядків
string s=new string (' ', 20); // конструктор створює рядок, //що складається з 20 пробілів
int zm = 20020101; // ініціалізація цілочисельної змінної
string s = zm.ToString(); //перетворення змінної в тип string
char [] a={'a', 'b', 'c', 'd', 'e'}; // створення масиву //символів
string v=new string (a); // створення рядка з масиву //символів
char [] a={'a', 'b', 'c', 'd', 'e'};
// створення масиву символів
string v=new string (a, 0, 2)
// створення рядка з частини масиву символів, причому: 0 - // показує, з якого символу починати створення, 2 - кількість // символів
Зауважимо, що рядок може містити службові символи, які починаються з похилої риски (\). Так здійснюється, наприклад, переведення рядка та вставка символів табуляції. Оскільки похила риска вліво може самостійно використовуватись у деяких синтаксисах рядків (наприклад URL або шлях до каталогу), то в такому випадку перед похилою рискою має стояти ще одна похила риска. Рядки також можуть бути створені за допомогою дослівного запису у програмному коді. Такі рядки повинні починатися з символу @, який повідомляє конструктору String, що рядок повинен використовуватись дослівно, навіть якщо він містить службові символи.
Деякі службові символи наведені в таблиці 5.1.
Таблиця 5.1. Службові символи
Символ
| Опис
|
\’
| Уставляє одинарні лапки у текст
|
\”
| Уставляє подвійні лапки у текст
|
\\
| Уставляє зворотній слеш у текст
|
\n
| Уставляє новий рядок в текст
|
\r
| Повертає курсор на початок рядку
|
\t
| Уставляє символ горизонтальної табуляції в рядок
|
Отже, наведені нижче два рядки еквівалентні:
string str1 =- "\\\\Folder\\MyFolder\\File.doc";
string str2 = @"\\Folder\MyFolder\File.doc";
Над рядками можна виконувати наступні операції:
· присвоєння (=);
· дві операції перевірки еквівалентності (==) та (!=);
· конкатенація (+);
· взяття індекса ([]).
Для перевірки рівності двох рядків необхідно використовувати оператор «==». Як правило, коли оператор «==» застосовується до об’єктів-посилань, то він визначає, чи відносяться обидва посилання до одного і того ж об’єкта. Але при застосуванні його до об’єктів типу string, здійснюється перевірка рівності вмісту двох рядків. Аналогічно використовується оператор «!=».
Зауважимо, що вміст string-обєктів незмінний, тобто послідовність символів з яких складається рядок, змінити не можна. На перший погляд це може здаватися суттєвим недоліком, проте це не так. Дане обмеження дозволяє C# ефективно використовувати рядки. Якщо необхідно отримати рядок, що буде містити певну частину вже існуючого, то потрібно створити новий рядок, який буде містити необхідні зміни. Розглянемо методи для роботи з символами (табл. 5.2).
Таблиця 5.2. Методи для роботи з символами
|
|
IsDigit
| Повертає значення true, якщо даний символ відноситься до категорії десяткових цифр
|
IsLetter
| Повертає значення true, якщо даний символ відноситься до категорії літер
|
IsLetterOrDigit
| Повертає значення true, якщо даний символ належить до категорії літер або десяткових цифр
|
IsNumber
| Повертає значення true, якщо даний символ належить до категорії цифр (десяткових або шістнадцяткових)
|
IsSeparator
| Повертає значення true , якщо даний символ відноситься до категорії знаків розділювачів
|
IsUpper
| Повертає значення true , якщо даний символ заданий у верхньому регістрі
|
IsLower
| Повертає значення true, якщо даний символ заданий у нижньому регістрі
|
ToUpper
| Переводить відповідний символ у верхній регістр
|
ToLower
| Переводить відповідний символ у нижній регістр
|
Кожен статичний метод має два варіанти виклику: з параметром типу char або з двома параметрами – перший рядок типу string, а другий – індекс символу типу int у рядку.
Наприклад, для того визначення того, що символ є цифрою, можна використати такий метод:
bool Check = Char.IsDigit(‘A’);
Якщо треба визначити чи починається слово з великої літери, то використовується метод вже з двома вхідними параметрами:
string word = “Україна”;
bool Check = Char.IsUpper(word,0);
Клас String охоплює багато методів для роботи з рядками, основні з яких такі:
· порівняння рядків;
· зміни та перетворення рядків: заміна частин, регістру символів, перетворення між рядками та іншими типами;
· звернення до окремих підрядків у рядку;
· форматування виведення.
Таблиця 5.3. Статичні методи
Назва
| Опис
|
Compare
| Порівняння двох рядків у лексикографічному порядку. Метод повертає 1, якщо лівий рядок більший від правого; -1 якщо лівий рядок менший від правого та 0 якщо рядки однакові
|
Concat
| Злиття довільної кількості рядків
|
Copy
| Створення копії рядка
|
Join
| Злиття масиву рядків в один рядок. Між елементами масиву вставляються розділювачі
|
Split
| Створення масиву рядків з одного рядка. Де елементи масиву – частини рядка, відокремлені вказаним розділювачем
|
Format
| Форматування рядка за вказаним форматом.
|
Копіювання рядка можна розглянути на такому прикладі:
string Text1 = "one two three";
string Text2 = String.Copy(Text1);
Для визначення довжини рядка і збереження її в змінну можна використати такий приклад:
string Text1 = "1-2-3-4";
int StrLen = Text1.Length; // Запише значення 7
Для визначення частини одного рядка та її запису в іншу змінну,використовується такий код:
string Text1 = "Певний текст";
string Text2 = Text1.Substring(7); // В змінну Text2
//запишеться "текст"
Методи Split та Join працюють за оберненим принципом. Метод Splitз з рядка формує масив рядків.
string Text1 = "Слово1,слово2,слово3,слово4";
string[] Arr; // Оголошуємо масив
Arr = Text1.Split(','); // Записуємо значення в масив, //вказуючи в лапках відповідно розділювач між словами.
string Text2 = String.Join("-", Arr);// З масиву
//створюємо новий рядок, вставляючи між словами //вказаний розділювач.
Клас string містить досить велику кількість методів для роботи з рядками. Деякі з них наведені в таблиці 5.4.
Таблиця 5.4. Методи для роботи з рядками
|
|
|
CompareTo
| Метод
| Порівняння поточного екземпляру рядка з іншим рядком
|
IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny
| Екземплярні методи
| Визначення індексів першого та останнього входження заданого підрядка або іншого символу з вказаної множини в даний рядок
|
Insert
| Екземплярний метод
| Вставка підрядка в задану позицію
|
Length
| Властивість
| Повертає довжину рядка
|
PadLeft,
PadRigth
| Екземплярні методи
| Вирівнювання рядка по лівому або правому краю шляхом вставки потрібного числа пробілів на початку або в кінці рядка
|
Remove
| Екземплярний метод
| Видалення підрядка з вказаної позиції
|
Replace
| Екземплярний метод
| Заміна всіх уходжень даного підрядка або символу новим підрядком або символом.
|
Split
| Екземплярний метод
| Розділення рядка на елементи з використанням різних розділювачів. Результат розміщується в масив рядків
|
StartWith, EndWith
| Екземплярні методи
| Повертає значення true або false залежно від того, чи починається або закінчується рядок даним підрядком
|
Substring
| Екземплярний метод
| Виділення підрядка, починаючи з указаної позиції
|
ToCharArray
| Екземплярний метод
| Перетворення рядка в масив символів.
|
ToLower,
ToUpper
| Екземплярні методи
| Перетворення рядка до нижнього або верхнього регістру
|
Trim,
TrimStart,
TrimEnd
| Екземплярні методи
| Видалення пробілів на початку та в кінці рядка або тільки з одного кінця
|
RichTextBox 
За допомогою елемента управління RichTextBox, користувач може вводити і змінювати текст. Елемент управління також надає розширені можливості форматування в порівнянні зі стандартним елементом управління TextBox. Елемент керування RichTextBox містить безліч властивостей, які можна використовувати при застосуванні форматування до будь-якої частини тексту в елементі керування. Перед зміною форматування тексту цей текст необхідно виділити. Тільки до виділеного тексту можна застосувати форматування символів і абзаців. Після того як для виділеного тексту був призначений який-небудь параметр, текст, введений після виділеного, буде форматуватися з урахуванням того ж параметра, поки цей параметр не буде змінений, або не буде виділена інша частина документа елемента керування. У таблицях 5.5 та 5.6 відображено основні властивості та методи для роботи з RichTextBox.
Таблиця 5.5 Властивості RichTextBox
|
|
AutoWordSelection
| Повертає або задає значення, що вказує чи виконується автоматично виділення всього слова, коли користувач виділяє його частину за допомогою миші
|
DetectUrls
| Отримує або задає значення, що визначає, чи буде елемент управління RichTextBox автоматично форматувати адресу URL при введенні її в елемент керування
|
EnableAutoDragDrop
| Отримує або задає значення, за допомогою якого дозволяється перетягування тексту, зображень та інших даних
|
Lines
| Отримує або задає рядки тексту в елементі керування "Текстове поле"
|
Multiline
| Отримує або задає значення, що показує, чи є даний елемент управління багаторядковим RichTextBox
|
ScrollBars
| Отримує або задає тип смуг прокрутки, що відображаються в елементі управління RichTextBox
|
ShortCutsEnabled
| Отримує або задає значення, яке вказує, чи увімкнене зчитування гарячих клавіш
|
Таблиця 5.6. Методи RichTextBox.
Назва
| Опис
|
AppendText
| Додає текст у кінець поточного тексту в текстовому полі
|
Clear
| Вилучає весь текст з елемента управління "Текстове поле"
|
Copy
| Копіює поточний вміст з текстового поля в буфер обміну
|
Find (String)
| Здійснює пошук тексту в елементі керування RichTextBox
|
LoadFile (String)
| Завантажує файл у форматі RTF або стандартний текстовий файл у кодуванні ASCII в елемент керування RichTextBox
|
Paste
| Замінює поточний вміст у текстовому полі вмістом буфера обміну
|
Завдання для самостійної роботи
1. Вивести всі слова, що починаються на вказану літеру.
2. Усі літери у верхньому регістрі змінити на нижній.
3. Підрахувати кількість голосних літер у словах, що містять більше 5 літер.
4. Поміняти місцями літери у словах, крім першої та останньої, в довільному порядку.
5. Вивести речення після вказаного слова.
6. Вивести усі речення, що починаються на вказане слово.
7. Вилучити усі зайві пробіли між словами, якщо такі існують.
8. Змінити місцям першу й останню літери у всіх словах.
9. Замінити цифри 1,2..9 відповідним текстовим еквівалентом «один», «два» … «дев’ять».
10. Вивести усі слова, в яких зустрічається подвоєння літер.
11. Замінити в тексті усі входження заданого слова іншим.
12. Вивести слова, літери в яких розміщені в алфавітному порядку.
13. Змінити в дзеркальному порядку розміщення літер у словах.
14. Вилучити з тексту слова, в яких зустрічаються літери «ц», «о», «ш», «п», «г».