2013-12-12 197 views
0

域\ X_User | X_User,域\ Y_User | Y_User,分割字符串

我使用的是SSRS报告,我收到上述模式的值(它可能包含任何用户数),我试图写在表体(自定义代码的可视化基本函数)来拆分上面的字符串并返回以下值:

X_User,Y_User

我试图里面写这个代码报告身体

Public Function SubString_Owner(X As String) As String 

Dim OwnerArray() As String = Split(X, ",") 

Dim Names As String 

Dim i As Integer = 0 

While i <= OwnerArray.Length - 1 

    Dim NamesArr As String() = Split(OwnerArray(0), "|") 

    Names = NamesArr(1) + "," 

     i += 1 

End While 

Return Names 
End Function 

问题是当试图分裂OwnerArray(i)使用索引,它提供了一个错误,但使用固定的值,如“零” OwnerArray(0),其打造精品,任何一个能弄清楚这是为什么时? ?

回答

0

是否字符串结束一个逗号,就像你把例子串?

因为如果是这样的话,那是你的问题就在这里。

你的第一次分裂,然后创建一个带有3个指标

{"Domain\X_User|X_User", "Domain\Y_User|Y_User", ""} 

阵列(注意在指数2空字符串)

如果你那么做的时候,以循环你去阵3次,拆分那里工作得很好指数在0和1,从而{“域\ X_User”,“X_User”}和{“域\ Y_User”,“Y_User”},但分裂第三届指数,将拆分的结果是空阵列。

当您尝试检索NamesArr阵列的第二个指标,它会导致IndexOutOfRangeExeption。

你最好的广告某种循环内检查,以确保你实际上可以拆分你的价值:

Public Function SubString_Owner(X As String) As String 

     Dim OwnerArray() As String = Split(X, ",") 

     Dim Names As String 

     Dim i As Integer = 0 

     While i <= OwnerArray.Length - 1 
      If Not String.IsNullOrEmpty(OwnerArray(i)) AndAlso OwnerArray(i).Contains("|") Then 
       Dim NamesArr As String() = Split(OwnerArray(i), "|") 

       Names &= NamesArr(1) & "," 

      End If 
      i += 1 
     End While 

     Return Names 
    End Function 

我在这里做2次检查,首先要确保提供的值ISN” t Nothing(null)和2nd查看它是否包含所需的“|”分裂它。如果该值为Nothing,则第二个语句会给出NullReference错误。

另外请注意,我编辑的行

Names = NamesArr(1) + "," 

Names &= NamesArr(1) & "," 

你的声明将覆盖每回路名称,你会只返回最后一个用户名。此外,为了连接VB.NET中的字符串,你应该使用“&”而不是“+”

哦,为什么你没有使用FOR循环?它比While循环更具可读性,因此在这种情况下是首选。