我有一个这样的字段,我只希望在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;
答案 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}