Шаг 24 - Преобразование Character - Numeric

В ходе написания большой программы вам наверняка придется столкнуться с получением числа из его строкового представления. Давайте посмотрим, как это делается в VFP.

Собственно нас будет интересовать только одна функция VAL(), которая и осуществляет данное преобразование. Вот пример от Microsoft иллюстрирующий ее работу:

CLEAR
STORE '12' TO A
STORE '13' TO B
? VAL(A) + VAL(B)  && Выводится 25.00
STORE '1.25E3' TO C
? 2 * VAL(C)  && Выводится 2500.00

Вроде бы все просто, но мне приходилось сталкиваться с ситуациями, когда из строки текста нужно вырезать только цифры.

Например, у нас есть программка для построения некоего отчета, в котором фигурируют номера документов, а берутся они из числового поля таблицы. Поэтому номера типа "123а" мы записать туда не можем, а вот "123" запросто. Напишем функцию, возвращающую целое число из смешанного номера. Создадим программу с именем GetDigits, в ней пишем код:

function GetDigits(cMixedVal)
	cNumber = ""
	for nCounter = 1 to len(cMixedVal)
		cCharacter = substr(cMixedVal, nCounter, 1)
		if isdigit(cCharacter)
			cNumber = cNumber + cCharacter
		endif
	endfor
	if len(cNumber) > 0
		nNumber = int(val(cNumber))
	else
		nNumber = 0
	endif
	return nNumber
endfunc

Получаем следующий результат:

24_1.gif (2993 b)

Обратное преобразование (из числа в строку) осуществляется функцией STR(). Здесь только следует обратить внимание на то, что в ней дополнительными параметрами могут указываться длина возвращаемой строки и количество десятичных мест. Если передаваемых десятичных мест меньше, чем реально есть в числе, то результат автоматически округлится в соответствии с передаваемыми параметрами. Если длина строки указывается меньше чем порядок числа, то вернется "*":

24_2.gif (3911 b)

Надеюсь, что теперь преобразование Character - Numeric не вызовет у вас трудностей.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Клементьев В.А - 05.08.2002