Crystal - 基于回车的拆分字符串

时间:2018-05-08 14:41:33

标签: crystal-reports crystal-reports-2010

我有一个这样的字段,我只希望在Crystal报告上显示第一个/最新的条目:

05/01/2018 00:00:00 pm备注

04/01/2018 00:00:00 pm更多笔记

03/01/2018 00:00:00 pm更多笔记

这是我尝试使用的代码,但我得到的错误是"下标必须介于1和数组大小之间。"请有人帮我指点正确的方向吗?

stringvar array csl;
stringvar return;
csl:=split({table.field},chr(13));
//csl[1]
if isnull({table.field}) then return:= ""
else return:=csl[1];
return;

1 个答案:

答案 0 :(得分:1)

错误的原因可能是因为在split之后检查了空值。

我通常会尽量避免在Crystal Reports中使用数组/变量。主要是因为您无法在包含变量的公式上对聚合函数进行分组或使用。

所以这是一个适用于字符串函数的解决方案:

首次参赛

If InStr({table.field}, chr(13)) > 0 Then
    Left({table.field}, InStr({table.field}, chr(13)))
Else
    {table.field}

上次加入

If InStrRev({table.field}, chr(13)) > 0 Then
    Right({table.field}, Len({table.field}) - InStrRev({table.field}, chr(13)))
Else
    {table.field}

修改

要获得第二行,您必须执行InStr / InStrRev两次:

首次参赛

If InStr(InStr({@table.field}, chr(13))+1,{@table.field}, chr(13)) > 0 Then
    Left({@table.field}, InStr(InStr({@table.field}, chr(13))+1, {@table.field}, chr(13)))
Else
    {@table.field}

上次加入

If InStrRev({@table.field}, chr(13), InStrRev({@table.field}, chr(13))+1) > 0 Then
    Right({@table.field}, Len({@table.field}) - InStrRev({@table.field}, chr(13),InStrRev({@table.field}, chr(13))-1))
Else
    {@table.field}