子串和逗号分隔字符的返回列表

时间:2013-12-11 14:33:53

标签: vb.net ssrs-2008

Domain\X_User|X_User,Domain\Y_User|Y_User,

我正在使用SSRS报告并且我收到了上述值,我想在报告中编写visual basic函数(自定义代码)来拆分上面的字符串并返回以下值:

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)时,它会出错,但在使用固定值时,如zero,它构建正常。任何人都可以弄清楚这是为什么吗?

3 个答案:

答案 0 :(得分:1)

这是一个更通用的解决方案,适用于任意数量的项目:

Dim sourceString As String = "Domain\X_User|X_User,Domain\Y_User|Y_User,"
Dim domainsAndUsers As IEnumerable(Of String) = sourceString.Split(","c).Where(Function(s) Not String.IsNullOrEmpty(s))
Dim usersWithoutDomains As IEnumerable(Of String) = domainsAndUsers.Select(Function(s) s.Remove(0, s.IndexOf("\") + 1))
Dim users As IEnumerable(Of String) = usersWithoutDomains.Select(Function(s) s.Remove(s.IndexOf("|")))   
Dim result As String = users.Aggregate(Function(s, d) s & "," & d)

或者如果你想将它作为单行函数,请点击这里:

  Function Foo(sourceString As String) As String
    Return sourceString.Split(","c).Where(Function(s) Not String.IsNullOrEmpty(s)).Select(Function(s) s.Remove(0, s.IndexOf("\") + 1)).Select(Function(s) s.Remove(s.IndexOf("|"))).Aggregate(Function(s, d) s & "," & d)
  End Function

编辑:

您可能需要将Imports System.Linq添加到顶部。不确定SSRS是否可以使用LINQ。如果没有,那么这里是一个没有LINQ的类似解决方案:

Dim sourceString As String = "Domain\X_User|X_User,Domain\Y_User|Y_User,"
Dim domainsAndUsers As IEnumerable(Of String) = sourceString.Split(","c)
Dim usersWithoutDomains As String = String.Empty
For Each domainUser As String In domainsAndUsers
    usersWithoutDomains &= domainUser.Remove(0, domainUser.IndexOf("\") + 1) & ","
Next

答案 1 :(得分:0)

    Dim strTest As String = "Domain\X_User|X_User,Domain\Y_User|Y_User"

    MsgBox(strTest.Split("|")(0).Split("\")(1) & " " & strTest.Split("|")(1).Split("\")(1))

答案 2 :(得分:0)

只要强烈遵循您所显示的模式,这是一种可以处理可变数据的简单方法:

Imports System.Linq

    Dim strtest As String = "Domain\X_User|X_User,Domain\Y_User|Y_User,"
    'This splits the string according to "|" and ",".  Now any string without _
    a "\" is the user and Join adds them together with `,` as a delimiter
    Dim result As String = Join((From s In strtest.Split("|,".ToCharArray, StringSplitOptions.RemoveEmptyEntries)
                                Where Not s.Contains("\")
                                Select s).ToArray, ",")

以防LINQ对您不可用这里没有LINQ的相同结果的另一种方式:

    Dim result As String = ""
    For Each s As String In strtest.Split("|,".ToCharArray, StringSplitOptions.RemoveEmptyEntries)
        If Not s.Contains("\") Then
            result += s & ","
        End If
    Next
    result = result.TrimEnd(",".ToCharArray)