Процедури і функції для роботи з рядками в delphi, delphi, компоненти delphi, вихідні коди delphi

Процедури і функції для роботи з рядками в 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 поверне позицію першого входження, після чого пошук потрібно продовжити з такої позиції. Наприклад, в слові фельдфебель так можна знайти обидві «їли».

Якщо ж підрядка в рядку немає, то повернеться безнадійний нуль!