видоизменяет сроку S, стирая Len символов, начиная с символа с номером Start:
S := 'СТРОКА';
Delete(S, 2, 4); {S='CA'}
После стирания подстроки ее оставшиеся части как бы склеиваются.
Если Start=0 или превышает длину строки S, то строка не изменится. Также не изменит строку значение Len=0. При Len, большем чем остаток строки, будет удалена подстрока от Start и до конца S. Это можно использовать при «подрезании» строк до заданной величины:
- 156 -
Delete( S, 16, 255)
Здесь строки S длиною менее 17 символов пройдут через процедуру неизменными, а все остальные будут укорочены до длины в 16 символов.
8.3.1.5. Процедура Insert( Subs : String; VAR S : String; Start: Integer) выполняет работу, противоположную той, что делает Delete. Insert вставляет подстроку Subs в строку S, начиная с позиции Start:
S: = 'Начало-конец';
Insert( 'середина-', S, 8 );
{ теперь S = 'Начало-середина-конец' }
Если измененная строка S оказывается слишком длинной, то она автоматически укорачивается до объявленной длины S (при этом, как всегда, «теряется» правый конец).
Пример использования пары процедур Insert и Delete можно увидеть на рис, 8.5, где приводится функция создания строки с текстом посередине.
| { Функция возвращает строку длиной Len, заполненную символом Ch, со вставленной в середину подстрокой S }
| >FUNCTION CenterStr( S: String; Len: Byte; Ch: Char ) : String;
| VAR
| > fs : String; { промежуточная строка-буфер }
| > ls, l2 : Byte; { вспомогательные переменные }
| BEGIN
| > FillChar(fs[1], Len, Ch); { заполнение строки fs Ch }
| > fs[0] := Chr( Len ); { восстановление длины fs }
| > ls := Length( S ); { длина входной подстроки S }
| >if ls>=Len then
| >begin { если некорректны параметры}
| > CenterStr:=S; Exit { то ничего с S не делается }
| >end;
| > l2 := ( Len-ls } div 2 +1;{место начала вставки в fs }
| > Delete( fs, l2, ls ); {очистка места в центре fs }
| > Insert( S, fs, l2 ); {и вставка туда строки S }
| > CenterStr := fs {итоговое значение функции }
| END;
| >{=== ПРИМЕР ВЫЗОВА ФУНКЦИИ ===}
| BEGIN
| > WriteLn(CenterStr( 'Работает!', 80, '='));
| > ReadLn { пауза до нажатия клавиши ввода }
| END.
Рис. 8.5
- 157 -
8.3.1.6. Функции Pos(Subs, S : String) : Byte возвращает номер символа в строке S, с которого начинается включение в S подстроки Subs. Если же S не содержит в себе Subs, то функция вернет 0. Пример использования функции дан на рис. 8.6, где построена модификация процедуры преобразования Str.
| { Процедура преобразования числа X в строку S}
| { Вход : X — числовое значение; }
| { F — полная длина поля числа; }