8.3.1. Редактирование строк
Функция Length(S : String) возвращает текущую длину строки S. Вообще говоря, можно вместо нее пользоваться конструкцией Ord( S[0] ), что то же самое.
Функция Concat производит слияние переданных в нее строк. Вместо нее всегда можно пользоваться операцией «+»:
S3 := Concat( S1,S2 ); { то же, что S3 := S1 + S2 }
S3 := Concat( S3,S1,S2 ); { то же, что S3 := S3 + S1 + S2 }
Если сумма длин строк в Concat превысит максимальную длину строки в левой части присваивания, то излишек будет отсечен.
8.3.1.3. Функция Сору(S : String; Start, Len : Integer) позволяет выделить из строки последовательность из Len символов, начиная с символа Start. Если Start больше длины всей строки S, то функция вернет пустую строку, а если Len больше, чем число символов от Start до конца строки S, то вернется остаток строки S от Start до конца. Например:
SCopy = Сору( 'АВС***123', 4, 3 ) { SСору='***' }
SCopy = Copy( 'ABC', 4, 3 ) { SCopy=' '}
SCopy = Copy( 'ABC***123', 4,11 ) { SCopy='***123' }
- 155 -
Используя процедуру Copy, построим игровой пример появления строки на экране (рис. 8.4).
| USES CRT; { используется модуль CRT }
| { Процедура выводит строку S в позиции (X,Y), }
| { с эффектом раздвижения и звуковым сигналом. }
| PROCEDURE ExplodeString(X,Y: Byte; S: String; С: Word );
| VAR
| > i,L2 : Byte;
| BEGIN
| > L2 := (Length(S) div 2 ) + 1; { середина строки }
| >if X < L2 then
| > X:=L2; { настройка X }
| >for i:=0 to L2-1 do
| >begin { цикл вывода: }
| > GotoXY( X-i, Y ); { начало строки }
| { Вывод расширяющейся центральной части строки: }
| > Write( Copy( S, L2-i, 2*i+1 ));
| > Sound(i*50); { подача звука }
| > Delay(С); { задержка С мс }
| > NoSound { отмена звука }
| >end { конец цикла }
| END;
| >{ ========= ПРИМЕР ИСПОЛЬЗОВАНИЯ ПРОЦЕДУРЫ ======== }
| BEGIN
| > ClrScr; { очистка экрана }
| > ExplodeString( 40, 12, '12345678900987654321', 30);
| > ReadLn { пауза до нажатия клавиши ввода }
| END.
Рис. 8.4
8.3.1.4. Процедура Delete( VAR S : String; Start, Len : Integer )