Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и подобно Currency представляет собой вещественное число с фиксированной дробной частью: в целой части числа хранится дата, в дробной - время.
Дата определяется как количество суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени 20:05. Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 н.э.) игнорируются функциями преобразования даты к строковому типу.
Над данными типа TDateTime определены те же операции, что и над вещественными числами, а в выражениях этого типа могут участвовать константы и переменные целого и вещественного типов.
Поскольку тип TDateTime совместим с форматом вещественных чисел, можно без труда определить дату, отстоящую от заданной на сколько-то дней вперед или назад: для этого достаточно соответственно прибавить к заданной дате или отнять от нее нужное целое число. Например, оператор
Для обработки текстов в Object Pascal используются следующие типы:
· короткая строка shortString или string[n] , где n <= 255;
· длинная строка string;
· широкая строка WideString;
· нуль-терминальная строка pchar.
Общим для этих типов является то, что каждая строка трактуется как одномерный массив символов, количество символов в котором может меняться в работающей программе: для string [n] длина строки меняется от 0 до n, для string и pchar - от 0 до 2 Гбайт.
В стандартном Pascal используются только короткие строки String[n]. В памяти такой строке выделяется n+i байт, первый байт содержит текущую длину строки, а сами символы располагаются начиная со 2-го по счету байта. Поскольку для длины строки в этом случае отводится один байт, максимальная длина короткой строки не может превышать 255 символов. Для объявления короткой строки максимальной длины предназначен стандартный тип ShortString (эквивалент String[255]).
В Windows широко используются нуль-терминальные строки, представляющие собой цепочки символов, ограниченные символом #о. Максимальная длина такой строки лимитируется только доступной памятью и может быть очень большой.
В 32-разрядных версиях Delphi введен новый тип string, сочетающий в себе удобства обоих типов. При работе с этим типом память выделяется по мере надобности (динамически) и ограничена имеющейся в распоряжении программы доступной памятью.
Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением #о.
Например, следующие операции отношения дадут значение True:
'А' > '1'
'Object' < ' Object Pascal'
'Пас' > 'Pas cal'
Основные действия над строками string и символами реализуются с помощью описываемых ниже стандартных процедур и функций (в квадратных скобках указываются необязательные параметры).
Таблица 3.6.Процедуры и функции для работы со строками
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
Вставляет подстроку 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 и возвращает номер позиции, с которой она начинается. Если подстрока не найдена, возвращается ноль
Устанавливает новую (меньшую) длину 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..Mах
Function StrToTime
(St:String): TDateTime;
Преобразует символы строки St во время.
Строка должна содержать два или три числа, разделенных правильным для Windows раздели телем времени (для русифицированной версии таким разделителем является “:”). Числа задают часы, минуты и, возможно, секунды. За послед ним числом через пробел могут следовать символы “am” или “рm”, указывающие на 12- часовой формат времени
Procedure Val
(St: String; var
X; Code: Integer);
Преобразует строку символов St во внутреннее представление целой или вещественной переменной х, которое определяется типом этой переменной. Параметр Code содержит ноль, если преобразование прошло успешно, и тогда в х помещается результат преобразования, в противном случае он содержит номер позиции в строке St, где обнаружен ошибочный символ, и в этом случае содержимое х не меняется. В строке St могут быть ведущие и/или ведомые пробелы. Если St содержит символьное представление вещественного числа, разделителем целой и дробной частей должна быть точка независимо от того, каким символом этот разделитель указан в Windows
Преобразует дату и время из параметра в строку символов Преобразует дату и время из параметра value в строку St в соответствии со спецификаторами параметра Format
Function DateToStr
(Value: TDateTime): String;
Преобразует дату из параметра value в строку символов
Function FloatToStr
(Value: Extended): String;
Преобразует вещественное значение value в строку символов.
Function IntToHex
(Value: Integer; Digits: Integer):Strings;
Преобразует целое число Value в строку символьного представления шестнадцатеричного формата: Digits - минимальное количество символов в строке
Function IntToStr
(Value: Integer) : String;
Преобразует целое значение Value в строку символов
Procedure Str
(X [:Width[:Decimals]];
var St:String);
Преобразует число х любого вещественного илицелого типов в строку символов St; параметры width и Decimals, если они присутствуют, задают формат преобразования: width определяет общую ширину поля, выделенного под соответ ствующее символьное представление вещественного или целого числа х, a Decimals - количество символов в дробной части (этот параметр имеет смысл только в том случае, когда х -вещественное число)
Function TimeToStr
(Value: TDateTime): String;
Преобразует время из параметра Value в строку символов
При преобразовании с помощью функций StrToxxx строка может содержать недопустимые для типа ххх символы. В этом случае возбуждается исключительная ситуация EConvertError. При обратных преобразованиях xxxToStr формат получаемой строки зависит от установленных в Windows системных параметров: разделителей даты, времени, целой и дробной частей вещественного числа.
Примечание
Обычно разделителем групп разрядов в русской языке принято считать пробел. Однако в русифицированном варианте Windows для этих целей на самом деле используется, не пробел, а символ #160, внешне похожий на пробел.