Извлечение чисел из строки в отчетах 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