繁体   English   中英

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

[英]How to extract substring from string in crystal report

我是水晶报告的新手。

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

Abc123, uttd333, ddt-435

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

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

管理员 ID,例如

格力999, ttt999

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

有没有像 SQL 中的 Ltrim 这样的东西,我们可以用它在水晶报表中实现这一点?

Afaik CR 中没有内置函数来从字符串中删除非数字字符,因此您必须自己滚动(将 {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的回答现在更简单了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM