Crystal - 根据回车拆分字符串 return

Crystal - Split string based on carriage return

我有一个这样的字段,我只希望 first/latest 条目显示在 Crystal 报告中:

05/01/2018 00:00:00 下午笔记

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

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

这是我一直在尝试使用的代码,但出现错误 "a subscript must be between 1 and the size of the array." 有人可以帮我指出正确的方向吗?

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

错误的原因大概是因为检查 null 发生在 split.

之后

我通常尽量避免在 Crystal 报告中使用 arrays/variables。主要是因为您不能对包含变量的公式进行分组或使用聚合函数。

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

第一次进入

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}