从水晶报告中的字符串中提取数字9

时间:2015-01-21 15:16:49

标签: crystal-reports crystal-reports-9

我正在尝试为客户端执行快速修复。我们有一个报告字段,显示字符串中的容差值,如+/- 20,-19 +18。这是微米级,客户希望它以毫米为单位。所以我需要将此字符串的数字部分除以1000并显示结果。

我对水晶报道比较陌生,凭借我的有限知识和搜索本网站的建议,我用以下代码行创建了一个函数,

  

功能(stringvar x)

     

本地stringvar数组输入:= split(x," + / - ");

     

VAL(输入[UBOUND(输入)])/ 1000

上述功能适用于公差值+/-。但是,我无法找到为#19; -19 + 18'做到这一点的方法。我希望结果为-0.019 +0.018

我可以在数据库源中轻松完成并将其发送到报告中。但是,客户需要快速修复报告。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

我找到了一个适用于这个具体案例的答案。 我在公式字段中使用了以下条件。根据条件我称之为用户定义的功能'容忍'容忍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'。