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