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

问题描述

我是水晶报告的新手。

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

Abc123,uttd333,ddt-435

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

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

管理ID,例如

Gree999,ttt999

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

是否可以在Crystal报表中使用类似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,“”))

利用数字始终在末尾的优势。

,

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

#include <SDL2>
#include <stdio.h>

void main()
{
    printf("Testing");
}

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