функции С и C++, библиотек C++Builder, API Windows________________819

функция	синтаксис / преобразует
StrToIntDef	int StrToIntDef (const System::AnsiString S, int Default)Строку в целое, при ошибке — значение Default по умолчанию
TextToFloat	bool TextToFloat(char * Buffer, void *Value, TFloatValue ValueType)Строку Buffer в число Value типа ValueType (см. TFloatValue в разделе 14.4.4)

Комментарии

Многие функции взаимного преобразования чисел и строк, объявленные в
файле SysUtils.hpp, используют для указания типа числа переменную ValueType,
которая может принимать значение fvExtended — число с плавающей запятой
типа Extended, или значение fvCurrency — число типа Currency. Многие функции
используют для форматирования строку типа TFloatFormat, подробно описанную
в разделе 14.4.4, или формат функции FormatFloat, описанный в разделе 14.4.5,
или строку форматирования функции, Format, описанную в разделе 14.4.3.

Ряд функций получает список форматируемых значений из открытого масси-
ва аргументов Args размера Args_Size -1. В качестве Args_Size в них задается по-
следний индекс массива Args типа TVarRec. В этих функциях используется стро-
ка форматирования, описанная в разделе 14.4.3. Приведем пример использования
одной из таких функций — функции Format:

AnsiString s;

TVarRec Args[3] = (11, -l.le+08, 0.00011};

s = Format("%d %g %f %0:10d %10g %10.5f", Args, 2);

В этом примере объявлена переменная s, в которую производится запись резу-
льтатов форматирования, и массив Args, в который занесены форматируемые чис-
ла. Обратите внимание на то, что размер массива равен 3, а в функцию Format пе-
редается в качестве размера число 2 — максимальное значение индекса, на 1 мень-
шее размера. Если бы нужно было форматировать не все три, а, например, только
два первых числа массива, то в качестве размера можно было бы передать 1.

Строка форматирования в этом примере сначала заносит в строку s значения
элементов массива по форматам % d, % g, % f, оставляя между ними пробелы (про-
белы между спецификациями в строке форматирования переносятся в строку ре-
зультата). Затем спецификация %0:10d сбрасывает индекс массива на 0, приводя
к повторному форматированию элементов массива. Повторно они форматируются
с заданной шириной поля 10, а последнее число еще и с заданной точностью 5.

Для ссылки на массив аргументов можно было бы воспользоваться макросом
EXISTINGARRAY:

s = Format("%d %g %f %0:10d %10g %10.5f".EXISTINGARRAY(Args));

Можно было бы и не создавать заранее массива аргументов, а сформировать
его непосредственно в вызове функции Format с помощью макроса OPENARRAY:

s = Format("%d %g %f %0:10d %10g %10.5f",

OPENARRAY(TVarRec,( 11, -l.le+08, 0.00011)));

Подробнее об этих макросах и вообще о передаче в функции открытых масси-
вов см. в главе 12 в разделе 12.10.3.

При ошибках преобразования рассматриваемые в данном разделе функции ге-
нерируют исключение EConvertError. Это правило не затрагивает фунцию StrTo-
IntDef, которая в случае ошибки заносит в результат указанное в ней значение по
умолчанию.