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