ВУЗ:
Составители:
Рубрика:
57
После стирания подстроки её оставшиеся части как бы склеиваются.
Если Start=0 или превышает длину строки S, то строка не изменится.
Также не изменит строку значение Len=0. При Len, больше чем остаток
строки, будет удалена подстрока от Star и до конца S. Это можно
использовать при «подрезании» строк до заданной величины:
Delete(S, 16, 255)
Здесь строки S длиною менее 16 символов
пройдут через процедуру
неизменными, а остальные будут укорочены до длины в 15 символов.
5. Процедура Insert (Subs:String; VAR S:string; Start:byte ) выполняет
работу противоположную той, что делает Delete. Вставляет подстроку Subs в
строку S, начиная с позиции Start.
S:= ′Начало – конец′;
Insert(′середина – ′, S, 8);
Writeln(S);
{теперь S = ′Начало – середина – конец′}
Если изменённая строка S оказывается слишком длинной, то она
автоматически укорачивается до объявленной длины S (при этом, как всегда
«теряется» правый конец).
Если значение Start превышает исходную
длину строки S, то строка
Subs присоединяется справа к строке S.
Start – может быть и целочисленным выражением.
6. Функция Pos(Subs, S:string):byte – проверяет содержание
подстроки Subs в строке S. Возвращает номер символа в строке S, с которого
начинается включение в S подстроки Subs. Если же S не содержит в себе
Subs, то функция вернёт 0.
var S:string; N:byte;
S:=′Автоматизация технологических процессов′;
N:=Pos(′_′, S);
Writeln(N); {результат N=14}
Недостатком функции является то, что она возвращает ближайшую
позицию Subs в S от начала строки, и не позволяет
найти все вхождения
подстроки в S, а также определить их количество.
7. Процедура Str(x[:Width [:dec]]; VAR S:string) служит для
преобразования числовых значений в строковые. Это, в частности,
необходимо для работы с процедурами модуля Craph:OutText(S:string) –
вывод строки S от положения курсора, и OutTextXY(x, y:integer; S:string) –
58
вывод строки ориентируясь по координатам х, у. х может быть переменной
или значением целого или вещественного типов. Можно задать поле
формата, указывая ширину поля для вещественного числа
и знаков после
десятичной точки. Для целых значений можно задать только поле Width , для
вещественных – либо оба поля (формат с фиксированной точкой), либо одно
– Width. В последнем случае задаётся экспоненциальный формат общей
длиной Width. Напомним, что экспоненциальный формат чувствителен к
использованию сопроцессора.
Например:
А:= -6; В:= 1.18822Е-2;
Str(A:4,st1); {результат st1=′_ _ -6′}
Str(B:8:5,st2); {результат st2=′_1190′}
Str(6.66:6:0,S); {результат S=′_ _ _ _ _ 7′}
Если число имеет меньше знаков, чем дано в поле, то оно будет
выровнено по правому краю, пустое место заполнится пробелами. Если
задать поле Width отрицательным, то выравнивание происходит по левому
краю, а излишки как бы стираются:
Str(6.66:-8:1,S) {
результат S = ′6.7′}
8. Процедура Val(S:string; VAR V; VAR ErrCode:Integer) процедура
преобразует строковое значение S в числовое значение и присваивает это
значение переменной V. Если преобразование возможно, то переменная
ErrCode равна нулю, в противном случае она содержит номер символа в S, на
котором процедура застопорилась. Тип V должен соответствовать
содержимому строки S. Если в S имеется точка или степень числа Е+nn, то V
должна быть вещественного типа, в
остальных случаях может быть целой.
Массу проблем доставляет переполнение: если S= ′60000′, а V описано как
byte, то что получится в итоге?
Возможны два варианта. Первый – при работе программы
проверяются диапазоны и индексы (режим $R+); при переполнении
возникнет фатальная ошибка счёта, и программа прервётся. Второй –
проверка отключена (режим $R-); всё зависит от типа V: если
он
вещественный или Longint, то при переполнении ErrCode<>0, а V содержит
числовой «мусор». Но если V имеет тип «короче» чем Longint, то ErrCode
при переполнении молчит (равно 0), а в V записывается результат
переполнения, мало похожий на содержимое S. Поэтому, рекомендуется при
преобразовании строк с целыми числами на место V ставить переменную
типа longint.
После стирания подстроки её оставшиеся части как бы склеиваются. вывод строки ориентируясь по координатам х, у. х может быть переменной Если Start=0 или превышает длину строки S, то строка не изменится. или значением целого или вещественного типов. Можно задать поле Также не изменит строку значение Len=0. При Len, больше чем остаток формата, указывая ширину поля для вещественного числа и знаков после строки, будет удалена подстрока от Star и до конца S. Это можно десятичной точки. Для целых значений можно задать только поле Width , для использовать при «подрезании» строк до заданной величины: вещественных либо оба поля (формат с фиксированной точкой), либо одно Delete(S, 16, 255) Width. В последнем случае задаётся экспоненциальный формат общей Здесь строки S длиною менее 16 символов пройдут через процедуру длиной Width. Напомним, что экспоненциальный формат чувствителен к неизменными, а остальные будут укорочены до длины в 15 символов. использованию сопроцессора. 5. Процедура Insert (Subs:String; VAR S:string; Start:byte ) выполняет Например: работу противоположную той, что делает Delete. Вставляет подстроку Subs в А:= -6; В:= 1.18822Е-2; строку S, начиная с позиции Start. Str(A:4,st1); {результат st1=′_ _ -6′} Str(B:8:5,st2); {результат st2=′_1190′} S:= ′Начало конец′; Str(6.66:6:0,S); {результат S=′_ _ _ _ _ 7′} Insert(′середина ′, S, 8); Если число имеет меньше знаков, чем дано в поле, то оно будет Writeln(S); выровнено по правому краю, пустое место заполнится пробелами. Если {теперь S = ′Начало середина конец′} задать поле Width отрицательным, то выравнивание происходит по левому Если изменённая строка S оказывается слишком длинной, то она краю, а излишки как бы стираются: автоматически укорачивается до объявленной длины S (при этом, как всегда Str(6.66:-8:1,S) {результат S = ′6.7′} «теряется» правый конец). 8. Процедура Val(S:string; VAR V; VAR ErrCode:Integer) процедура Если значение Start превышает исходную длину строки S, то строка преобразует строковое значение S в числовое значение и присваивает это Subs присоединяется справа к строке S. значение переменной V. Если преобразование возможно, то переменная Start может быть и целочисленным выражением. ErrCode равна нулю, в противном случае она содержит номер символа в S, на 6. Функция Pos(Subs, S:string):byte проверяет содержание котором процедура застопорилась. Тип V должен соответствовать подстроки Subs в строке S. Возвращает номер символа в строке S, с которого содержимому строки S. Если в S имеется точка или степень числа Е+nn, то V начинается включение в S подстроки Subs. Если же S не содержит в себе должна быть вещественного типа, в остальных случаях может быть целой. Subs, то функция вернёт 0. Массу проблем доставляет переполнение: если S= ′60000′, а V описано как byte, то что получится в итоге? var S:string; N:byte; S:=′Автоматизация технологических процессов′; Возможны два варианта. Первый при работе программы N:=Pos(′_′, S); проверяются диапазоны и индексы (режим $R+); при переполнении Writeln(N); {результат N=14} возникнет фатальная ошибка счёта, и программа прервётся. Второй Недостатком функции является то, что она возвращает ближайшую проверка отключена (режим $R-); всё зависит от типа V: если он позицию Subs в S от начала строки, и не позволяет найти все вхождения вещественный или Longint, то при переполнении ErrCode<>0, а V содержит подстроки в S, а также определить их количество. числовой «мусор». Но если V имеет тип «короче» чем Longint, то ErrCode 7. Процедура Str(x[:Width [:dec]]; VAR S:string) служит для при переполнении молчит (равно 0), а в V записывается результат преобразования числовых значений в строковые. Это, в частности, переполнения, мало похожий на содержимое S. Поэтому, рекомендуется при необходимо для работы с процедурами модуля Craph:OutText(S:string) преобразовании строк с целыми числами на место V ставить переменную вывод строки S от положения курсора, и OutTextXY(x, y:integer; S:string) типа longint. 57 58
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »