Процедури і функції для роботи з рядками в Delphi
Рядки дуже часто використовуються в програмах - хоча б для виведення різних повідомлень користувачеві, щоб він не заблукав в інтерфейсі. Ну, для таких простих випадків цілком достатньо тих відомостей, які ви отримали на уроці, присвяченому рядках. Якщо ж у вас більш серйозні наміри і ви хочете маніпулювати рядками по своєму бажанню (наприклад, ви пишете якусь словесну гру на кшталт Балда або логогріфи), то в Delphi знайдеться все необхідне і для таких любителів словесності і жонглювання приставками і суфіксами.
Для визначеності в прикладах будемо вважати, що
Коли ми вивчали прості операції з рядками, то розглядали конкатенацію рядків за допомогою оператора +. Але об'єднати два рядки можна і функцією
яка повертає «суму» двох рядків:
Для порівняння рядків замість операторів відносини можна використовувати такі функції.
Обидві функції порівнюють рядки s1 і s2. Перша - з урахуванням регістра букв (прописні / рядкові), друга - без обліку.
Ці функції повертають значення
0, якщо рядки рівні;
Їх не можна застосовувати до російським словами, тому краще користуватися функціями:
які однаково добре працюють і з латинськими, і з російськими буквами.
Тепер перейдемо до процедур і функцій, які виконують зі словами складніші дії.
Досить часто потрібно перетворити всі букви слова або до верхнього, або до нижнього регістру. Якщо слова складаються тільки з латинських букв, то можна використовувати функції:
Перша переводить слова в нижній регістр (малі літери), друга - в верхній (великі літери). Для російських (і для латинських) букв годяться функції.
Функція AnsiLowerCase (S1) поверне рядок «смородина».
Функція AnsiUpperCase ( 'смородина') поверне рядок «СМОРОДИНА».
Процедури виведення повідомлень на екран (зазвичай в мітку або список) вимагають в якості параметра рядок, а що робити, якщо потрібно пред'явити користувачеві число? - Перетворити число в рядок! Це можна зробити і самостійно, але набагато зручніше скористатися вбудованими функціями Delphi.
Частіше за інших в програмах застосовують функції для перетворення цілих чисел в рядок:
Наприклад, IntToStr (-1234) поверне рядок «1234».
Для дійсних чисел теж є подібна функція
Якщо ви хочете дізнатися, як десяткове число записується в 16-річної системі числення, застосуєте до нього функції:
Другий параметр - Digits - задає число цифр в 16-ковий числі.
При введенні даних з файлу або деяких компонентів замість числа ми отримуємо рядок символів. І хоча вона складається з цифр, це не число. В цьому випадку допоможе функція
Причому рядок S може містити не тільки десяткове, але і 16-ковий число.
Однак ця функція «небезпечна»: якщо в рядку знайдеться хоча б один невірний символ, виникне помилка. Якщо у вас є обгрунтовані сумніви в правильності рядки, краще звернутися до надійної функції
Вона повертає TRUE, якщо рядок перетворена в число без помилок, і FALSE, якщо з помилками. Мінлива Value (в нашому прикладі i) зберігає число.
Так само можна використовувати і процедуру:
V - змінна цілого або дійсного типу.
Code - змінна цілого типу, в якій повертається номер помилкового символу в рядку. Якщо таких символів немає, то значення цієї змінної дорівнюватиме нулю.
Аналогічні функції для дійсних чисел:
На початку і / або наприкінці рядка можуть бути присутніми непотрібні пропуски. Від них легко позбутися. застосувавши функції
Перша видаляє початкові пробіли, друга - кінцеві, третя - і ті, і інші. Ці функції повертають новий рядок - вже без пробілів.
Дізнатися довжину рядка (число символів в ній) можна за допомогою функції
Наприклад. Length (S1) поверне 9, а Length (S2) - 7.
Ну, а тепер - найцікавіші процедури і функції!
Видаляємо частина рядка S від символу номер Index:
Тут Count - число видаляються символів.
Наприклад, після виконання процедури:
рядок si матиме значення «РОДИНА».
А після процедури delete (s2,5,3); рядок s2 буде урізана до «ПАРА».
Якщо значення змінної Index менше одиниці або більше довжини рядка, то рядок залишиться без змін. Нічого не трапиться з рядком і якщо Count менше одиниці.
Якщо ж Count більше, ніж число символів в рядку, починаючи з Index, то будуть видалені всі символи до кінця рядка.
Процедура Insert діє протилежно - вона вставляє підрядок Substr в рядок Dest після символу номер Index:
Наприклад, після виконання процедури insert ( 'З', s1,6); рядок s1 перетвориться в смішне слово «СМОРОЗДІНА».
А процедура insert ( 'КА', s2,8); дозволить нам насолодитися неологізнеологізмом «ПАРАШЮТКА».
Якщо ж ми не хочемо псувати вихідний рядок, як це робить процедура Delete, то можемо створити новий рядок, вирізавши з будь-якого рядка потрібний нам шматок:
Зверніть увагу: щоб отримати те ж саме слово, що й у прикладі з delete (s2,5,3) ;, ми вказали інші значення параметрів у виклику функції!
І остання функція знаходить позицію підрядка substr в рядку str. function Pos (const substr: string; const str: string): Integer;
Якщо в рядку шукана підрядок зустрічається кілька разів, то перший виклик функції Pos поверне позицію першого входження, після чого пошук потрібно продовжити з такої позиції. Наприклад, в слові фельдфебель так можна знайти обидві «їли».
Якщо ж підрядка в рядку немає, то повернеться безнадійний нуль!