Несмотря на разницу во внутреннем представлении, короткие строки ShortString и длинные строки string имеют для программиста одинаковые свойства.
Текущую длину строки можно получить с помощью функции Length. Например, следующий оператор уничтожает все ведомые (хвостовые) пробелы:
while (Length(stS) о 0) and (stS[Length(stS)] = ' ' ) do
SetLentgh(stS, Length (stS) - 1);
В этом примере стандартная процедура setLength устанавливает новую длину строки. К строкам можно применять операцию “+” -сцепление, например:
stS := 'а' + 'b'; // stS содержит "ab"
stS := stS + ' с '; // stS содержит "abc"
Если длина сцепленной строки превысит максимально допустимую длину N короткой строки, то “лишние” символы отбрасываются. Следующая программа, например, выведет символ “I”:
Procedure TfmExamlpe.bbRunClick(Sender: TObject);
var
ssS: String[1];
begin
ssS := '123';
IbOutput := ssS;
end;
Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением #о.
Следующие операции отношения дадут значение True:
'''' < '.'
'А' > '1'
'Object' < ' Object Pascal'
'Пас' > 'Pasc al'
Все остальные действия над строками и символами реализуются с помощью описываемых ниже стандартных процедур и функций (в квадратных скобках указываются необязательные параметры).
Таблица 7.7. Процедуры и функции для работы со строками
Function AnsiLowerCase(const S: String ): String; | Возвращает исходную строку S, в которой все заглавные буквы заменены на строчные в соответствии с национальной кодировкой Windows (т. е. с учетом кириллицы) | |
Function AnsiUpperCase(const S: String ): String; | Возвращает исходную строку s, в которой все строчные буквы заменены на заглавные в соответствии с национальной кодировкой Windows | |
Function Concat(Sl [, S2, ..., SN]: String ): String; | Возвращает строку, представляющую собой сцепление строк-параметров S1, S2, ... , SN | |
Function Copy(St: String; Index, Count: Integer): String; | Копирует из строки St count символов, начиная с символа с номером Index | |
Procedure Delete(St: String;
Index, Count:" Integers- |
Удаляет count символов из строки St, начиная с символа с номером index | |
Procedure Insert(SubSt:
String; St, Index: Integer); |
Вставляет подстроку SubSt в строку St, начиная с символа с номером Index | |
Function Length(St: String): Integer; | Возвращает текущую длину строки St | |
Function LowerCase(const S:String): String; | Возвращает исходную строку S, в которой все латинские заглавные буквы заменены на строчные | |
procedure OleStrToStrVar(Source: PWideChar; var Dest:String) ; | Копирует “широкую” (двухбайтную) строку в обычную строку Object Pascal | |
Function Pos(SubSt, St:String): Integer; | Отыскивает в строке St первое вхождение подстроки SubSt и возвращает номер позиции, с которой она начинается. Если подстрока не найдена, возвращается ноль | |
Procedure SetLength(St:String; NewLength: Integer); | Устанавливает новую (меньшую) длину NewLength строки St. если NewLength больше текущей длины строки, обращение к SetLength игнорируется | |
function StringOfChar(Ch:Char; Count: Integer):String; | Создает строку, состоящую из Count раз повторенного символа ch | |
function StringToOleStr(const Source: String):PWideChar; | Копирует обычную строку в двухбайтную | |
function StringToWideChar(const Source: String; Dest:PWideChar; DestSize: Integer) : PWideChar; | Преобразует обычную строку в строку с символами UNICODE | |
Function Uppercase(const S:String): String; | Возвращает исходную строку S, в которой все строчные латинские буквы заменены на заглавные | |
Подпрограммы преобразования строк в другие типы | ||
Function StrToCurr(St: String): Currency; | Преобразует символы строки St в целое число типа Currency. Строка не должна содержать ведущих или ведомых пробелов | |
Function StrToDate(St: String): TDateTime; | Преобразует символы строки St в дату. Строка должна содержать два или три числа, разделенных правильным для Windows разделителем даты (в русифицированной версии таким разделителем является “.”). Первое число - правильный день, второе - правильный месяц. Если указано третье число, оно должно задавать год в формате XX или ХХХХ. Если символы года отсутствуют, дата дополняется текущим годом. Например: DateToStr(StrToDate('28.06')) даст строку '28.06.99' (см. ниже пояснения) | |
Function StrToDateTime(St:
String): TDateTime; |
Преобразует символы строки St в дату и время. Строка должна содержать правильную дату (см. StrToDate) и правильное время (см. StrToTime), разделенные пробелом, например: StrToDateTime('28.06 18:23') | |
Function StrToFloat(St:String): Extended | Преобразует символы строки St в вещественное число. Строка не должна содержать ведущих или ведомых пробелов | |
Function StrToInt(St:String): Integer; | Преобразует символы строки St в целое число. Строка не должна содержать ведущих или ведомых пробелов | |
Function StrToIntDef(St:String; Default: Integer):Integer; | Преобразует символы строки St в целое число.
Если строка не содержит правильного представления целого числа, возвращается значение Default |
|
Function StrToIntRange(St:String; Min, Max: Longint):Lomgint; | Преобразует символы строки St в целое число и возбуждает исключение ERangeError, если число выходит из заданного диапазона Min.. .мах | |
Function StrToTime(St:String): TDateTime; | Преобразует символы строки St во время.
Строка должна содержать два или три числа, разделенных правильным для Windows раздели телем времени (для русифицированной версии таким разделителем является “:”). Числа задают часы, минуты и, возможно, секунды. За послед ним числом через пробел могут следовать символы “am” или “рm”, указывающие на 12- часовой формат времени |
|
Procedure Val(St: String; var
X; Code: Integer); |
Преобразует строку символов St во внутреннее представление целой или вещественной переменной х, которое определяется типом этой переменной. Параметр Code содержит ноль, если преобразование прошло успешно, и тогда в х помещается результат преобразования, в противном случае он содержит номер позиции в строке St, где обнаружен ошибочный символ, и в этом случае содержимое х не меняется. В строке St могут быть ведущие и/или ведомые пробелы. Если St содержит символьное представление вещественного числа, разделителем целой и дробной частей должна быть точка независимо от того, каким символом этот разделитель указан в Windows | |
Подпрограммы обратного преобразования | ||
Function DateTimeToStr(Value: TDateTime): String; Procedure DateTime-ToString(var St: String; For.gif" > |