Над рядками визначена операція конкатенації “+”, результат якої - рядок, в якому операнди з’єднанні в порядку їх слідування у виразі. Наприклад:
'Turbo' + 'Pascal' = 'TurboPascal';
'Turbo_' + 'Pascal ' + 'System' = 'Turbo_Pascal System';
Тому результатом виконання серії операторів
X := ' Приклад';
У := ' додавання ';
Z := ' рядків' ;
Writeln(X + Y + Z);
Writeln(Y + ' ' + Z + ' ' + X)
будуть виведені на екран рядки
Прикладдодаваннярядків
додавання рядків Приклад
Тип String допускає і пустий рядок - рядок, який не містить символів: EmptyStr := '' {лапки, що йдуть підряд}. Вона грає роль нуля (нейтрального елемента) операції конкатенації: EmptyStr + X = X + EmptyStr = X
Над рядками визначені також відношення (операції логічного типу)
" = ", " <> ", " < ", " > ", " <= ", " >= ".
Таким чином, кожний із рядкових типів упорядкований, причому лексикографічно. Це означає, що
а) порядок на рядках погоджений з порядком, заданим на символьному типі (Char);
б) порівняння двох рядків здійснюється посимвольно, починаючи з перших символів;
в) якщо рядок А є початком рядка В, то А < В;
г) пустий рядок - найменший елемент типу.
Наприклад:
а) 'с' < 'k', так як Ord(‘c’) < Ord(‘k’);
б) 'abс' < 'abk', так як перші два символи рядків співпадають, а порівняння третіх дає Ord(‘c’) < Ord(‘k’);
в) 'abс' < 'abkd', так як перші два символи рядків співпадають, а порівняння третіх дає Ord(‘c’) < Ord(k);
г) 'ab' < 'abсd', так як рядок 'ab'- початок рядка 'abсd'.
На рядковому типі даних визначені:
Функції:
a) Length(X: String): Byte; - довжина рядка X; { Length(EmptyStr) = 0 }
б) Pos(Y:String; X:String):Byte; - позиція першого символу першого зліва входження підрядка Y у рядок X. Якщо X не містить Y, Pos(Y, X) = 0.
в) Copy(X:String; Index, Count: Integer):String - підрядок рядка X, що починається з позиції Index і містить Count символів.
г) Concat(X1, X2, .., Xk: String): String; - конкатенація рядків Х1, X2, .., Xk. Інша форма запису суми X1+X2+ .. +Xk.
Процедури:
д) Delete(var X: String; Index, Count: Integer); З рядка X видаляється Сount символів, починаючи з позиції Index. Результат поміщується в змінну X.
e) Insert(Y:string; var X: String; Index: Integer); В строку X вставляється рядок Y, причому вставка здійснюється починаючи з позиції Index.
Стандартні процедури введення-виведення Паскаля розширені для введення-виведення рядків. Відмітимо, однак, що для введення декількох рядкових даних треба користуватись оператором Readln. Оператор Read у цих випадках може вести себе непередбачено.
Приклад 11.7. Дано масив A[1..n] of string[20]. Скласти програму заміни всіх перших входжень підрядка L в A[i] на підрядок R. Рядки L і R вводяться з клавіатури в виді рівності L = R. Результат замін відобразити у масив, елементи якого - рівності виду:
A[i]=результат заміни L на R в A[i].
Program RewriteArray;
Const
n = 100;
Single = 20;
Double = 41;
Type
Sitem = string[Single];
Ditem = string[Double];
SWordArray = array[1..n] of Sitem;
DWordArray = array[1..n] of Ditem;
Var
A: SWordArray;
B: DWordArray;
L, R: Sitem;
X : Sitem;
i, Index : Integer;
Procedure InpWord(var U, V : Sitem);
Var
X : Ditem;
j : Integer;
Begin
Writeln('________ Введення рівності L = R __________');
Read(X); j := Pos('=', X);
U := Copy(X, 1, j - 1);
V := Copy(X, j + 1, Length(X))
End;
Procedure InpArray;
begin
Writeln('====== Введення масиву слів ======');
For i:=1 to n do Readln(A[i])
end;
Procedure OutArray;
begin
Writeln('====== Виведення масиву слів ====');
For i:=1 to n do Writeln(B[i])
end;
Begin
InpArray; {введення масиву слів з клавіатури}
InpWord(L, R); {введення і аналіз рівності L = R}
For i := 1 to n do begin
X := A[i];
Index := Pos(L, X);
If Index <> 0
then begin
Delete(X, Index, Length(L));
Insert(R, X, Index)
end;
B[i] := A[i] + '=' + X
end;
OutArray; {виведення масиву слів до друку}
End.
11.7. Файли. Управління файлами
Програма, яка написана мовою Pascal, повинна якимось чином обмінюватись даними з зовнішніми пристроями ( отримувати дані з клавіатури, магнітного диска, виводити дані на екран, принтер і т.д.) Для роботи з зовнішніми пристроями використовуються файли. Файли - це значення файлового типу даних - ще одного стандартного складного типу в мові.
(Послідовний) файл – це послідовність однотипних компонент, яка має ознаку кінця і оброблюється послідовно – від початку до кінця.
Порядок компонент визначається самою послідовністю, подібно до того, як порядок слідування чергового кадру кінофільму визначається його розташуванням на кіноплівці. У будь-який момент часу доступний тільки один елемент файла (кадр кінофільму). Інші компоненти доступні тільки шляхом послідовного просування по файлу.
У результаті виконання програми відбувається перетворення одного текстового файла (який називається Input) в інший текстовий файл (який називається Output). Обидва ці файли є стандартними і використовуються для введення /виведення даних.
Над файлами можна виконувати два явних виду дій:
Перегляд (читання) файла.
Створення (запис) файла - виконується шляхом приєднання нових компонент у кінець початково порожнього файла.
Файли, з якими працює програма, повинні бути описані в програмі. Частина файлів (що представляють собою фізичні пристрої ) має в операційній системі стандартні імена. Наприклад, для читання даних з клавіатури і виведення результатів на екран монітора ми користуємось стандартними файлами Input і Output. Файл - принтер має ім’я Prn:
Імена нестандартних файлів, що використовуються в програмі, необхідно описувати у розділі змінних. Описання файлового типу відповідає діаграмі: