如何从 crystal 报告中的字符串中提取子字符串

How to extract substring from string in crystal report

我是 crystal 报告的新手。

我的数据(员工ID)格式如下

Abc123, uttd333, ddt-435

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

还有某些值永远不应打印。

Admin ID 例如

格力999、ttt999

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

是否有像我们在 SQL 中的 Ltrim 一样的东西,我们可以在 crystal 报告中使用它来实现这一点?

Afaik CR 中没有 built-in 函数可以从字符串中删除 non-numeric 个字符,因此您必须自己动手(将 {Befehl.EmployeeId} 替换为您的字段) :

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 上面的回答现在更简单了。