Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Crystal reports 拆分:下标必须介于1和数组大小之间_Crystal Reports - Fatal编程技术网

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

Crystal reports 拆分:下标必须介于1和数组大小之间,crystal-reports,Crystal Reports,我有一个超级简单的公式。问题是有时候数据没有第二个值,或者有时候值为空 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 ({

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

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]
更好的示例数据:

3011111*42011111111
2711 00291111111

711111//12111111111
/J1111 69111111111
170111

如果字符串最多可以包含两个值,用
空格分隔,则可以使用
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}, " "))
右侧部分:

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

  • 函数返回最后一个空格的位置,因为它向后搜索字符串
  • Len
    -函数返回字符串的长度
  • [length]-[last space的位置]=[right part的长度]


数据中的数字后面必须有隐藏的空格。我将>0提高到10,一些值仍然没有被分割。我对公式的最后一次迭代是:如果isnull({PO_-RECEIVE.VENDOR_-LOT_-ID}),那么“else if{PO_-RECEIVE.VENDOR_-LOT_-ID}”””,那么“else Split({PO-RECEIVE.VENDOR_-LOT_-ID})”可以显示上面添加的
{PO RECEIVE.VENDOR_-LOT_-ID}
-列的示例值吗,但是我包括了我在数据中看到的所有类型的变量。(任何带1的都可以是任何字符)请将示例数据添加到您的问题中,而不是添加到答案中。@Charles添加了一个解释
If InStr({PO_RECEIVE.VENDOR_LOT_ID}, " ") > 0 Then
    Right({PO_RECEIVE.VENDOR_LOT_ID}, Len({PO_RECEIVE.VENDOR_LOT_ID}) - InStrRev(testString, " "))