我正在使用拆分功能来分隔具有两个街道地址的列。
信息之间用,
隔开。
某些行仅具有一个与之关联的地址。
在我的街道地址2的那些行中,当我希望将其设为#ERROR
时得到null
。
我已经尝试过使用IIF()
表达式来表达,但是我遇到了麻烦。
Split(Fields!Street.Value, ",").GetValue(2)
答案 0 :(得分:1)
(对每个地址使用自定义功能。
改编自:Split String
Public Function GetAddress1(ByVal a as String)
Dim b() as string
b=Split(a,",")
Dim str_1(b.Length) As String
Dim i As Integer
For i = 0 To b.Length - 1
str_1(i) = b(i).Split(",")(0)
Next
return str_1
End Function
Public Function GetAddress2 (ByVal a as String)
Dim b() as string
b=Split(a,",")
Dim str_1(b.Length) As String
Dim i As Integer
For i = 0 To b.Length - 1
str_1(i) = b(i).Split(",")(1)
Next
return str_1
End Function
答案 1 :(得分:0)
与If语句不同,即使仅使用一个代码路径,IIf语句也会评估所有代码路径。这意味着未使用的代码路径中的错误将上升到IIf语句中的错误,从而阻止其正确执行。
要解决此问题,您需要使用在没有任何可分割的内容时不会引发错误的函数。
以下是应执行所需操作的代码示例:
=IIf(
InStr(
InStr(
Parameters!Street.Value
, ","
) + 1
,
Parameters!Street.Value
, ","
) = 0
, Nothing
, Right(
Parameters!Street.Value
, Parameters!Street.Value.ToString().Length - (
InStr(
InStr(
Parameters!Street.Value
, ","
) + 1
,
Parameters!Street.Value
, ","
)
)
)
)
让我们分解一下。
我使用了InStr(),Right(),Length()和IIf()函数的组合来分割字符串而不会引发错误。
InStr()用于查找字符串“,”在地址中的位置。如果找不到字符串,则返回0而不是错误。
InStr(Parameters!Street.Value, ",")
由于您似乎正在拆分函数中寻找第二个逗号,因此需要嵌套InStr函数。使用第一个逗号的位置作为搜索第二个逗号的起始位置。别忘了+1,否则您将再次找到第一个逗号。
InStr(InStr(Parameters!Street.Value, ",") + 1, Parameters!Street.Value, ",")
现在,即使不存在逗号,您也可以找到第二个逗号而不会引发错误。
基于第二个逗号的位置,请使用Right()函数来抓取第二个逗号右边的所有字符。由于Right()需要知道结尾处而不是开头有多少个字符,因此您需要从字符串的Length()中减去逗号的位置。这样可以有效地在逗号处分割字符串。
Right(
Parameters!Street.Value
, Parameters!Street.Value.ToString().Length - (
InStr(InStr(Parameters!Street.Value, ",") + 1, Parameters!Street.Value, ","))
)
)
如果您有两个以上的逗号,则可以通过跟随一个查找第三个逗号位置的Left()函数,仅抓住第二个和第三个逗号之间的字符串。
现在,如果没有第二个逗号,则可以使用IIf()函数返回NULL(无)。顶部的功能显示了所有这些如何组合在一起。
这可以通过使用函数来清除,但是提供的代码向您展示了如何实现。