Извлечение чисел из строки в отчетах Crystal

Я пытаюсь выполнить быстрое исправление для клиента. У нас есть поле отчета, в котором отображаются значения допусков в таких строках, как +/-20, -19 +18. Это в микрометрах, а клиент хочет в миллиметрах. Поэтому мне нужно разделить только числовую часть этой строки на 1000 и отобразить результат.

Я относительно новичок в Crystal Reports, с моими ограниченными знаниями и поиском предложений на этом сайте, я создал функцию со следующими строками кода:

Функция (stringvar x)

ввод локального массива stringvar:= split(x,"+/-");

Вал (вход [UBound(вход)])/1000

Вышеуказанная функция отлично работает для значений допуска +/-. Однако я не могу найти способ сделать это за '-19 +18'. Я хотел бы иметь результат как -0.019 +0.018

Я легко могу сделать это в источнике базы данных и отправить его в отчет. Однако клиенту нужно быстро исправить только отчет. Любая помощь будет принята с благодарностью.

2 ответа

Решение

Я выяснил ответ, который подойдет для этого конкретного случая. Я использовал следующие условия в поле формулы. Исходя из условия, я назвал определенную пользователем функцию "Допуск", "Допуск2", "Допуск3".

Поле формулы:

IF (Left ({PDPRINTDATA.PD_T45}, 3 )="+/-") THEN
'+/-' + ToText(Tolerance({PDPRINTDATA.PD_T45}),3)
ELSE IF (Left ({PDPRINTDATA.PD_T45} , 1 )="-") THEN
'-' + ToText(Tolerance2({PDPRINTDATA.PD_T45}),3) + '  +' + ToText(Tolerance3({PDPRINTDATA.PD_T45}),3)

Толерантность:

Function (stringvar x)
local stringvar array input := split(x,"+/-");
val(input[ubound(input)])/1000;

Tolerance2:

Function (stringvar x) local stringvar mystr := x; 
If NumericText (mystr[2 to 3]) Then
 ToNumber(mystr[2 to 3])/1000
Else 0

Tolerance3:

Function (stringvar x)
local stringvar mystr := x;
If NumericText (mystr[7 to 8]) Then
ToNumber(mystr[7 to 8])/1000
Else
0

Это решение работает для меня, учитывая тот факт, что строка всегда будет иметь формат "+/-XX" или "-XX +YY".

Попробуй это

if(Left (x, 3 )="+/-")
then ToNumber(split(x ,"+/-")[2])/100
else if(Left ({x , 1 )="+")
then ToNumber(split(x ,"+")[2])/100
else if(Left (x , 1 )="-")
then ToNumber(split(x ,"-")[2])/100
Другие вопросы по тегам