如何从水晶报表中的字符串中提取子字符串



我是水晶报告的新手。

我的数据(员工ID(采用以下格式

Abc123, uttd333, ddt-435

我只想提取数字,并删除前导字母和特殊字符。

此外,还有一些值永远不应该打印。

管理员ID,如

Gree999,ttt999

我知道有一个中间函数,但这需要我指定子字符串应该从哪里开始的位置。这些值没有固定数量的前导字母。

有没有像SQL中的Ltrim一样的东西可以用来在水晶报告中实现这一点?

Afaik CR中没有从字符串中删除非数字字符的内置函数,因此您必须滚动自己的(用字段替换{Befehl.EmployeId}(:

StringVar employeeId := {Befehl.EmployeeId};
StringVar result := "";
NumberVar i;
// transfer numeric chars into result one by one
For i := 1 To Length(employeeId) Do
(
If IsNumeric(employeeId[i]) Then
result := result + employeeId[i];
);
// output result only if employeeId is not in your admin list
If employeeId In Split('Gree999,ttt999', ',') Then
'--Admin--'
Else
result;

这里有一种只获取字符串数字部分的替代方法:strReverse(ToText(Val(strReverse({EmpId}((,0,"(

它利用了知道数字总是在末尾的优势。

要处理尾随零,可以使用:

local stringvar withoutTrailingZeros := strReverse(ToText(Val(strReverse({EmpId})),0,""));
withoutTrailingZeros + ReplicateString("0", Len({EmpId}) - (instr({EmpId}, withoutTrailingZeros) + Len(withoutTrailingZeros) - 1))

但现在mweber的答案更简单了。

最新更新