Вопрос: Какой язык программирования вы предпочитаете
|
Иллюстрированный самоучитель по Delphi 6
7.3.1. Типы
String и ShortString
Несмотря на разницу во внутреннем
представлении, короткие строки 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; Format:
String;- Value: TData-Time);
|
Преобразует дату и время из
параметра в строку символов Преобразует дату и время из параметра value
в строку St в соответствии со спецификаторами параметра Format (см. пояснения
ниже)
|
Function DateToStr(Value: TDateTime):
String;
|
Преобразует дату из параметра
value в строку символов
|
Function FloatToStr(Value:
Extended): String;
|
Преобразует вещественное значение
value в строку символов.
|
Function FloatToStrF(Value:
Extended; Format: TFloatPor-
mat; Precision, Digits: Inte
ger) : String;
|
Преобразует вещественное значение
Value в строку символов с учетом формата Format и параметров precision
и Digits (см. пояснения ниже).
|
Function Format(const Format:
String; const Args: array of const): Strings;
|
Преобразует произвольное количество
аргументов открытого массива Args в строку в соответствии с форматом Format
(см. пояснения ниже)
|
Function FormatDateTime (Format:
String; Value:.TDateTime): String;
|
Преобразует дату и время из
параметра value в строку символов в соответствии со спецификаторами параметра
Format (см. пояснения ниже)
|
Function FormatFloat(Format:String;
Value: Extended): String;
|
Преобразует вещественное значение
value в строку символов с учетом спецификаторов формата Format (см. пояснения
ниже)
|
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,
внешне похожий на пробел Убедиться: в, этом можно с помощью такой несложной
программы:
procedure
TfmExample.bbRunClick
(Sender : TObject) ;
var S:
String;
begin
S:=FloatToStrF(1000,ffNumber,4,0);
EdOutput.Yext:=IntToStr(Ord(S[2]));
end;
Если вы действительно хотите использовать
пробел, его нужно явно указать в окошке. Разделитель: групп разрядов (Пуск.|
Настройка | Панель управления | Язык и стандарты | Числа)
В Delphi 4...6 изменена функция StrToDate
для того, чтобы упростить ввод двух цифр года с учетом смены столетия. С этой
целью в модуле system введена глобальная переменная TwoDigitYearCenturywindow,
которая определяет цифровой рубеж столетия. Если две цифры года больше или равны
значению этой переменной, цифры года относятся к текущему столетию, если меньше
- переносятся в следующее. Пусть, например, TwoDigitYearCenturywindow содержит
значение 50. Тогда любые две цифры года в диапазоне 00..49 дополняются базой
2000 (2000, 2001,...,2049), в то время как цифры в диапазоне 50..99 дополняются
базой 1900 (1950, 1951,...,1999). Такой прием позволяет в известной мере смягчить
проблему двухцифровых годов на рубеже столетия, однако полным ее
решением
будет, разумеется переход на четырехцифровое представление года. По умолчанию
TwoDigitYearCenturywindow имеет значение 0, и поэтому любые две цифры года дополняются
базой 1900.
Используемая в процедуре DateTimeToString
и в функции FormatDateTime строка Format может содержать такие символы-спецификаторы
(в примерах показаны строки для времени 19 часов 45 минут и даты 8 июня 1999
года):
Таблица 7.8. Спецификаторы
формата даты/времени
с
|
Отображает сначала дату в формате
дд.мм.гг,
затем пробел и время в формате
чч.мм. ее:
08.06.
99 19:45
|
d
|
Отображает день без ведущего
нуля: 8
|
dd
|
Отображает день с ведущим нулем:
0 8
|
dddd
|
Отображает день недели: воскресенье
(для нерусифицированной версии Windows - Sunday)
|
ddddd
|
Отображает дату в формате
дд.
мм. гг:
08.06.99
|
dddddd
|
Отображает дату в формате
д
Месяц год:
8 Июнь 1999 (для нерусифицированной версии Windows - 8
June 1999)
|
m
|
Отображает число месяца без
ведущего нуля: 6
|
mm
|
Отображает число месяца с ведущим
нулем: 06
|
nunm
|
Отображает сокращенное название
месяца: июн.
|
nuninm
|
Отображает полное название
месяца: Июнь
|
у или уу
|
Отображает две последние цифры
года: 9 9
|
ууу или уууу
|
Отображает все цифры года:
1999
|
h
|
Отображает час без ведущего
нуля: 19
|
hh
|
Отображает час с ведущим нулем:
19
|
n
|
Отображает минуты без ведущего
нуля: 4 5
|
nn
|
Отображает минуты с ведущим
нулем: 4 5
|
s
|
Отображает секунды без ведущего
нуля: 0
|
ss
|
Отображает секунды с ведущим
нулем: 00
|
t
|
Отображает время в формате
чч:лш:
19:45
|
tt
|
Отображает время в формате
чч:мм:сс:
19:45:00
|
am/pm
|
Отображает время в 12-часовом
формате (am - до полудня, pm - после полудня). Для спецификаторов hh:
mm am/pm получим 07:45 pm
|
ampm
|
Отображает время в 12-часовом
формате, но без указания до/после полудня. Для спецификаторов hh: mm ampm
получим 07:45
|
a/p
|
Отображает время в 12-часовом
формате (а - до полудня, р - после полудня). Для спецификаторов hh: mm
a/p получим 07:45 р
|
/
|
Отображает используемый в Windows
разделитель даты. Для спецификаторов d/m/у получим 8. 6. 99
|
:
|
Отображает используемый в Windows
разделитель времени. Для спецификаторов h:n: s получим 19:45:0
|
Замечу, что любые другие символы,
указанные в строке Format, a также заключенные в апострофы или кавычки специальные
символы-спецификаторы помещаются в выходную строку без преобразования, поэтому
спецификаторы 'h час n мин' дадут строку 19 час 45 мин, а 'h час "n" мин' -
19час n мин.
При форматном преобразовании времени-даты
или других типов в строку и обратно могут пригодиться следующие системные переменные.
Таблица 7.9. Системные
переменные, управляющие стандартным отображением данных
CurrencyString: String;
|
Символ или символы денежной
единицы; для русифицированной Windows ими являются символы “р. ”
|
CurrencyFormat: Byte;
|
Определяет положение символов
денежной единицы: 0 - $1; 1 - 1$; 2 - $ 1; 3 - 1 $; в русифицированной
Windows используется формат 1 (1р.)
|
NegCurrFormat: Byte;
|
Определяет формат отрицательной
суммы: 0 = ($1); 1 = -$1; 2 = S-1; 3 = $1-; 4 = (1$); 5 = -1$; 6 = 1-$;
7 =1$-; 8=-!$; 9=-$!; 10=1 $-; 11 =$1-; 12=$-!; 13= 1- $; 14 = (S 1);
15 = (1 $); в русифицированной Windows используется формат 5 (-lp.)
|
ThousandSeparator: Char;
|
Разделитель тысяч; в русифицированной
Windows используется символ #166
|
DecimalSeparator: Char;
|
Разделитель дробной и целой
частей числа (', ')
|
CurrencyDecimals: Byte;
|
Количество цифр после запятой
в денежном формате. Обычно содержит 0, что блокирует вывод мелкой денежной
единицы. Чтобы в сумме присут ствовали не только рубли, но и копейки,
в переменную следует установить значение 2
|
DateSeparator: Char;
|
Разделитель даты; в русифицированной
Windows используется ' . '
|
ShortDateFormat: String;
|
Обычно используется формат
' dd. mm. уу ', что соответствует, например, дате '31.05.00'. По скольку
на рубеже столетий цифры года в таком формате кажутся неверными, я советую
в начале каждой программы вставлять оператор Short-DateFormat := 'dd.
mm.
yyyy';
это даст '31.05.2000'
|
LongDateFormat: String;
|
Для русифицированной версии
содержит символы 'dd MMMM yyyy г.',что дает'31 Май 2000 г. '
|
TimeSeparator: Char;
|
Разделитель времени (' : ')
|
TimeAMString: String;
|
Символы 12-часового формата
для времени до полудня (не используются в русифицированной версии Windows)
|
TimePMString: String;
|
Символы 12-часового формата
для времени после полудня (не используются в русифицированной версии Windows)
|
ShortTimeFormat: String;
|
Краткий формат времени (обычно
' h: mm ')
|
LongTimeFormat: String;
|
Полный формат времени (обычно
' hh: mm: ss ')
|
ShortMonthNames: array
[1..12] of String;
|
Краткие имена месяцев (янв,
фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек)
|
LongMonthNames: array
[1..12] of String;
|
Полные имена месяцев (Январь,
Февраль, Март, Апрель, Май, Июнь, Июль, Август, Сентябрь, Октябрь, Ноябрь,
Декабрь)
|
ShortDayNames: array [1..7]
of String;
|
Краткие имена дней недели (Вс,
Пн, Вт, Ср, Чт, Пт, Сб)
|
LongDayNames: array [1..7]
of String;
|
Полные имена дней недели (воскресенье,
понедельник, вторник, среда, четверг, пятница, суббота)
|
type TSysLocale = packed record
DefaultLCID: LCID; PriLangID: LANGID;
SubLangID: LANGID;
FarEast: Boolean;
MiddleEast: Boolean;
end;
var SysLocale: TSysLocale;
|
Определяет локализацию Windows:
DefaultLCID- идентификатор локализации (1049); PriLangID- идентификатор
первичного языка (25); SubLangID - идентификатор вторичного языка (если
в качестве второго языка используется английский (США), это поле имеет
значение 1); Far-East - локализация для Дальнего Востока (False): MiddleEast
- локализация для Среднего Востока(False)
|
EraNames: array [1..7] of String;
|
Используется в функции DateTimeToStr
в Windows для Ближнего Востока
|
EraYearOffsets: array [1..7]
of Integer;
|
Используется в функции DateTimeToStr
в Windows для Ближнего Востока
|
TListSeparator: Char;
|
Разделитель списка строк (';
')
|
Например, многие бухгалтерские программы
в западных странах используют еженедельный отчет. В этом случае может пригодиться
следующая подпрограмма, которая по заданной дате возвращает год, номер недели
от его начала, дату понедельника и дату воскресенья:
procedure
WeekToDates(aDate: TDateTime;
var
Week: Byte;
var
Year: Word;
var
FirstDate, LastDate: TDateTime);
{Возвращает для указанной
даты aDate год Year, номер недели от начала года Week, а также даты начала и
конца недели}
var
S: String;
begin
//Получаем в S символы
года для даты aDate:
DateTimeToString(S,'yyyy',aDate)
;
//Формируем дату 1
января:
FirstDate := StrTo-Date('01'+DateSeparator+'01'+DateSeparator+S)
;
Year := StrToInt(S);
//Возвращаем
год
//Формируем последнюю
дату 1-й недели:
LastDate := FirstDate;
DateTimeToString(S,'dddd',LastDate)
;
while
SOLongDayNames
[1]
do
//
LongDayNames [1
]= 'воскресенье '
begin
LastDate := LastDate+1;
DateTimeToString(S,'dddd',LastDate);
end;
Week
:= 1;
//Циклически наращиваем
FirstDate, LastDate и Week, пока
// LastDate не станет
больше или равна aDate:
while
LastDate<aDate
do
begin
inc(Week);
FirstDate := FirstDate+7;
LastDate := LastDate+7
end
end;
// WeekToDates
Для форматного преобразования вещественных
чисел предназначены функции FloatToStrF и FormatFloat. Первая использует значение
Format перечисляемого типа TFloatFormat и два дополнительных параметра - Precision
и Digits. Правила использования параду метров функции FloatToStrF показаны в
следующей таблице' (примеры преобразования даются для value = П = 3,141593654,
Precision = 5 и Digits
=
2):
Таблица 7.10. Правила
использования параметров функции FloatToStrF
Значение Format
|
Описание
|
ffExponent
|
Научная форма представления
с множителем ехх (“умножить на 10 в степени
XX”).
precision задает
общее количество десятичных цифр мантиссы, Digits - количество цифр в
десятичном порядке хх. Число округляется с учетом первой отбрасываемой
цифры:3,1416Е+00
|
ff Fixed
|
Формат с фиксированным положением
разделителя целой и дробной частей, precision задает общее количество
десятичных цифр в представлении числа. Digits - количество цифр в дробной
части. Число округляется с учетом первой отбрасываемой цифры:3,14
|
ff General
|
Универсальный формат, использующий
наиболее удобную для чтения форму представления вещественного числа. Соответствует
формату ff Fixed, если количество цифр в целой части меньше или равно
precision, а само число - больше или равно 0,00001, в противном случае
соответствует формату ff Exponent: 3,1416
|
ffNumber
|
Отличается от ffFixed использованием
символа-разделителя тысяч при выводе больших чисел (для русифицированной
версии Windows таким разделителем является пробел). Для value =
П
*1000
получим 3 141,60
|
ffCurrency
|
Денежный формат. Соответствует
ffNumber, но в конце строки ставится символ денежной единицы (для русифицированной
версии Windows - символы “р.”). Для value = я*1000 получим 3 141,60р.
|
Параметр Format в функции FormatFloat
может содержать такие спецификаторы:
Таблица 7.11. Спецификаторы
форматирования вещественных чисел
;
|
Разделитель спецификаторов
формата для положительного, отрицательного и нулевого числа
|
0
|
Определяет поле для цифры.
Если в данной позиции форматируемое число имеет значащую цифру, она выводится,
если нет - выводится 0
|
#
|
Определяет поле для цифры.
Если в данной позиции форматируемое число имеет значащую цифру, она выводится,
если нет - ничего не выводится
|
.
|
Поле для разделителя целой
и дробной частей числа
|
,
|
Поле для разделителя тысяч
|
E+,e+
E-,e-
|
Признак представления числа
в научном формате. В этом случае число представляется мантиссой и десятичным
порядком, между которыми стоит символ Е. Спецификаторы е+ и е+ предписывают
выводить знак + перед неотрицательным десятичным порядком, при использовании
Е- и е- знак + перед порядком не выводится
|
Как и в случае даты/времени, любые
другие символы строки Format, а также заключенные в апострофы или кавычки специальные
символы-спецификаторы помещаются в выходную строку без преобразования: для value
=
71*1000 спецификаторы'#, рубля' дадут строку 3 142 рубля. С помощью
символа “;” можно задавать различные формы представления положительного, отрицательного
и нулевого числа. При этом набор спецификаторов без “;” относится ко всем числам;
если используется один символ “;”, то спецификаторы слева от него применяются
для форматирования положительных чисел, справа - отрицательных, а вывод нулей
подавляется; при использовании двух символов “; ” первый набор - для положительных,
второй - для отрицательных и третий - для нулевых чисел. Например, спецификаторы
'#;нуль' для value = -1 выведут нуль, а для value = о ничего не выведут, в то
время как спецификаторы '#;00;нуль' для value = -1 выведут 01, а для value =
0 - строку
нуль. Спецификаторы
'#;;нуль' для value = -1 выведут -1, т. к. в этом случае спецификатор для отрицательных
чисел не задан и для их вывода будет использован спецификатор положительных
чисел, в то время как спецификаторы '#; ;нуль' подавляют вывод отрицательных
чисел.
Мощная функция преобразования Format
(табл. 7.7) перешла в Object Pascal из языка Си. Она позволяет преобразовать
сразу несколько элементов открытого массива аргументов в соответствии с указаниями
форматирующей строки. Например, Format('Строка "%s" содержит %d символов',['Паскаль',7])
даст такой результат: Строка "Паскаль" содержит 7 символов.
Элементами массива аргументов могут
быть константы и/или переменные целого и вещественного типа, строки и указатели.
Форматирующая строка -
это
произвольная строка, в которую в любом месте можно вставить
форматирующий
спецификатор.
Количество форматирующих спецификаторов должно быть не больше
количества элементов массива аргументов - в противном случае возникнет исключительная
ситуация. Каждому элементу массива аргументов по порядку их перечисления в конструкторе
массива функция ставит в соответствие форматирующий спецификатор по порядку
его следования в форматирующей строке: первому аргументу - первый спецификатор,
второму - второй и т. д. Если количество спецификаторов меньше количества аргументов,
“лишние” аргументы игнорируются.
Форматирующий спецификатор всегда
начинается символом процента и в общем случае имеет такую структуру (в квадратных
скобках указываются необязательные элементы):
"%" [index ":"] ["-"] [width]
["." prec] type
Здесь: index ":" - индекс открытого
массива, с помощью этого элемента можно явно указать аргумент, который будет
обрабатывать спецификатор; "-" указывает на необходимость прижать отформатированный
спецификатором текст к левой границе отведенного для него пространства; width
- число, определяющее количество символов для обработанного спецификатором текста;
если это число меньше требуемого, этот элемент спецификатора игнорируется, если
больше - дополняется справа (если есть элемент "-") или слева (если он отсутствует)
нужным количеством пробелов; "." prec - задает точность представления целых
и вещественных типов; type - символ, определяющий тип форматирования (см. таблицу
ниже).
Таблица 7.12. Форматирующие
спецификаторы для функции Format
d
|
Целое десятичное число. Если
задан параметр ргес, то символьное представле
ние должно содержать по меньшей
мере ргес десятичных цифр: если символьное представление содержит меньше
цифр, оно дополняется слева символами 0, если больше - параметр ргес игнорируется.
Если аргумент не является целым числом, возникает исключительная ситуация
|
u
|
Беззнаковое целое число. Используется
подобно типу d, но аргумент должен быть положительным числом. Если аргумент
- отрицательное целое, результат форматирования непредсказуем
|
е
|
Вещественное число в экспоненциальном
представлении: символьное представление имеет вид -d, dddddddddddE+ddd.
Если число положительное, ведущий минус опускается, а если его модуль
меньше 1, знак плюс меняется на минус. Всегда содержит одну цифру целой
части, по меньшей мере одну цифру дробной части и не меньше трех цифр
десятичного порядка. Если задан параметр точности, он определяет общее
количество цифр до символа Е, но не меньше двух: если параметр точности
содержит 1
или 0, он
заменяется на 2. Если символьное представление содержит больше символов,
чем ргес, оно округляется по первой отбрасываемой цифре. Умалчиваемое
значение параметра точности 15
|
f
|
Вещественное число в виде -ddd,
ddd (фиксированное представление). Параметр точности (по умолчанию 2)
указывает количество цифр в дробной части. Если он 0, выводится только
целая часть числа
|
g
|
Вещественное число в максимально
коротком представлении (экспоненциальном или фиксированном). Параметр
точности (по умолчанию 15) определяет максимальное количество значащих
разрядов. Если число имеет меньшее количество цифр, оно не дополняется
до ргес, а если число не имеет дробной части, оно выводится как целое
(без запятой)
|
n
|
Соответствует фиксированному
представлению, но использует символ-разделитель тысяч
|
m
|
Денежное представление вещественного
числа. Подобно типу n, но справа ставится знак денежной единицы
|
p
|
Указатель. Выводит содержимое
указателя в виде 8 шестнадцатеричных цифр
|
s
|
Аргумент должен быть символом,
строкой или строкой с терминальным нулем. Параметр точности, если указан,
определяет максимальную длину строки: если строка больше, она усекается,
если меньше - параметр точности игнорируется
|
x
|
Шестнадцатеричное представление
целого числа. Параметр точности определяет минимальное количество шестнадцатеричных
цифр (если число меньше, оно дополняется ведущими нулями)
|
Функция не чувствительна к высоте
букв, указывающих тип преобразования. Параметры index, ргес и width задаются
явно (числами в форматирующей строке) или неявно - с помощью символа “*”. В
этом случае в качестве параметра берется значение очередного аргумента в списке
аргументов (он должен быть целым числом). Например, два следующих обращения
дадут одинаковый результат:
Format ('%*.*f, [8, 2, 123.456]);
Format ('%8.2f, [123.456]);
|
|
|