Природно, що для ефективної роботи з текстом необхідно уміти обробляти не тільки окремі символи, але і слова, фрази, рядки, тобто групи символів. Для обробки таких груп символів в Паскалі використовується рядковий тип даних. Для опису рядкових змінних використовується службове слово string. Опис рядкової змінної в загальному вигляді виглядає таким чином: var <ім’я_зміної>: string [довжина]; після слова string вказується довжина описуваної змінної, тобто максимальна кількість символів, яка може містити дана змінна. Наприклад: var stroka: string [25];
Параметр, поміщений в квадратні дужки, не є обов’язковим і використовується в тому випадку, якщо існують причини, по яких необхідно жорстко обмежити максимальну довжину рядкової змінної. Якщо ж після імені змінної її довжина не указується, то за замовчуванням вона вважається рівною 255 символам. В цьому випадку опис символьної змінної виглядатиме так: var stroka: string;
Значення символьних змінних так само, як і вже знайомі нам символьні константи (до текстових констант відносяться, зокрема, повідомлення, що виводяться оператором Writeln), повинні обов’язково полягати в апострофи. Таким чином, оператор присвоєння рядкової змінної stroka значення ‘набір символів’ виглядатиме таким чином:
|
|
stroka:=‘набір_символів’;
Операція зчеплення (конкатенації) (+) застосовується для з’єднання кількох рядків в один результуючий рядок. Наприклад, ‘П’+’Е’+’О’+’М’ = ‘ПЕОМ’
Довжина результуючого рядка не повинна перевищувати 255 символів.
Операції відношення (=, <, >, <>, <=, >=) здійснюють порівняння двох рядкових операндів і мають пріоритет нижчий, ніж операції зчеплення (склеювання).
Порівняння рядків виконують зліва направо до першого не співпадаючого символу. Більшим вважається той рядок, в якого перший неспівпадаючий символ буде мати більший номер у кодовій таблиці ASCII. Якщо рядки мають різну довжину, але в загальній частині збігаються, вважається меншим той рядок, у якого довжина менша. Рядки вважаються рівними, якщо вони рівної довжини і містять однакові символи та розташовані в однаковому порядку Для присвоєння рядковій змінній значення результату рядкового виразу використовується оператор присвоювання (:=). Якщо довжина значення змінної після виконання оператора присвоювання перевищує максимально допустимий при описі розмір, усі зайві символи праворуч відсікаються (тобто втрачаються!). Допускається змішування в одному виразі операндів рядкового і символьного типів.
Для роботи із рядковими змінними в мові Паскаль використовуються різні стандартні процедури та функції, серед яких відзначимо функцію length. Аргументом даної функції є ім’я якої-небудь рядкової змінної, а значенням – фактична кількість символів, яка міститься у відповідному їй рядку (ця величина може бути менше максимальної довжини, заданої при описі змінної).
|
|
Так значення функції length, аргументом якої є розглянута вище змінна stroka, буде рівне 14, а не 25, як вказано в розділі описів, оскільки фраза ‘набір символів’ містить 14 символів.
Якщо є необхідність працювати не зі всім рядком цілком, а з яким-небудь окремим символом, що міститься в ній, то до цього символу можна звернутися в програмі безпосередньо. При цьому необхідно вказати поряд з ім’ям рядкової змінної порядковий номер символу в рядку. Номер символу вказується в квадратних дужках. Наприклад, якщо ми напишемо в основній частині програми (а не в розділі описів) stroka [5], то працювати ми будемо з буквою «р», яка є п’ятим по черзі символом в даному рядку.
Номер символу в рядку, взятий в квадратні дужки, може вказуватися не тільки у вигляді числової константи, але і за допомогою змінної цілого типа. В цьому випадку номер символу, що «викликається», буде рівний значенню даної цілочислової змінної. Наприклад, якщо ми присвоїмо цілочисловій змінній i значення 10, а потім вкажемо в програмі stroka [ i ], то в результаті буде «викликана» буква ‘в’, яка є в рядку десятою по черзі.
Крім того для роботи з рядками використовують:
Процедури
Delete(Str,Poz,N) – вилучення N символів з рядка Str, починаючи з позиції Poz. Якщо Poz >255, виникає програмне переривання. N, Poz: integer
Insert(Str1,Str2,Poz) –вставка рядка Str1 у Str2, починаючи з позиції Poz (має бути значенням типу integer).
Str(Number,St) – перетворення числового значення величини Number і занесення результату в рядок St. Після Number може записуватися формат, аналогічний формату виведення. Якщо у форматі зазначена недостатня кількість розрядів, поле виведення розширюється до потрібної довжини.
Значення Number | Вираз | Результат |
Str (Number:6, St) | ‘__1500’ | |
4.8Е+03 | Str (Number:10, St) | ‘______4800’ |
Str (- Number:3, St) | ‘-76854’ |
Val(St,Number,Cod) – перетворює значення St у величину цілого або дійсного типу і розміщує результат у Number. Значення St не повинно містити зайвих пробілів на початку і наприкінці рядка. Cod – ціла змінна, значення якої не дорівнює нулю, якщо під час перетворення виявлена помилка. Cod буде містити номер позиції першого помилкового символу, a Number не буде визначено.
Значення Str | Вираз | Результат |
‘1450’ | val (Str, Number, Cod) | 1450 Cod =0 |
‘14.2Е+02’ | val (Str, Number, Cod) | 1420 Cod =0 |
‘14.5А+01’ | val (Str, Number, Cod) | ? Cod =5 |
Функції
Copy(St,Poz,N) – копіює (запам’ятовує) зі змінної St підрядок довжиною N символів, починаючи з позиції Poz. Якщо Poz > Lenght(Sf), то результатом буде пробіл; якщо Poz > 255, то виникне помилка при виконанні.
Pos(St1,St2) – виявляє номер першої появи в рядку St2 рядка St1. Результат має цілий тип і дорівнює номеру тієї позиції, де знаходиться перший символ рядка Stl. Якщо в St2 рядок Stl не знайдений, результат дорівнює 0.
UpCase(Ch) – перетворює малу літеру на велику. Параметр і результат мають літерний тип. Обробляються тільки літери латинського алфавіту.
Concat(A, В,...) – з’єднує рядки в один рядок.
Рядком нульової довжини називається вираз ‘ ‘. Розглянемо задачу, що зумовлює застосування такого даного.