拆分:下标必须介于1和数组大小之间

时间:2018-02-20 14:23:17

标签: crystal-reports

我有一个超级简单的公式。问题是有时数据没有第二个值,或者有时值为空。

JSONObject parse = JSON.parseObject("");
for (Map.Entry<String, Object> entry : parse.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}

我在想是否可以想出一些逻辑来判断字符串是否有多个值可以解决我的问题,但是没有找到我想要的东西:

Split ({PO_RECEIVE.VENDOR_LOT_ID}," ")[2]

ID
111 222
123

123 222

更好的示例数据:

If {PO_RECEIVE.VENDOR_LOT_ID} = SingleOrBlankString then 
{PO_RECEIVE.VENDOR_LOT_ID} else
Split ({PO_RECEIVE.VENDOR_LOT_ID}," ")[2]

1 个答案:

答案 0 :(得分:1)

如果字符串最多可包含两个值,以space分隔,则可以使用space函数检查字符串是否包含InStr

If InStr({PO_RECEIVE.VENDOR_LOT_ID}, " ") > 0 Then
    {PO_RECEIVE.VENDOR_LOT_ID}
Else
    Split ({PO_RECEIVE.VENDOR_LOT_ID}," ")[2]

如果部件之间可以有多个空格,您可以使用以下公式来获取值:

左侧部分:

此函数返回字符串的左侧部分,直到第一个空格。

If InStr({PO_RECEIVE.VENDOR_LOT_ID}, " ") > 0 Then
    Left({PO_RECEIVE.VENDOR_LOT_ID}, InStr({PO_RECEIVE.VENDOR_LOT_ID}, " "))

右边:

此函数返回最后一个空格后的字符串的右侧部分。

  • InStrRev - 函数返回最后一个空格的位置,因为它向后搜索字符串。
  • Len - 函数返回字符串的长度。
  • [length] - [最后一个空格的位置] = [右边部分的长度]


If InStr({PO_RECEIVE.VENDOR_LOT_ID}, " ") > 0 Then
    Right({PO_RECEIVE.VENDOR_LOT_ID}, Len({PO_RECEIVE.VENDOR_LOT_ID}) - InStrRev(testString, " "))