0

我是 Visual Basic .net 的新手,我需要一些帮助:

我收到这些字符串:

!re=.id=*10000AF=name=Down-PBX=parent=Down=packet-mark=pack_pbx=limit-at=256000=queue=PCQ_Down=priority=1=max-limit=512000=burst-limit=0=burst-threshold=0=burst-time=00:00:00=invalid=false=disabled=true=comment=PBX

!re=.id=*10000B0=name=Up-PBX=parent=Up=packet-mark=pack_pbx=limit-at=256000=queue=PCQ_Up=priority=1=max-limit=512000=burst-limit=0=burst-threshold=0=burst-time=00:00:00=invalid=true=disabled=true=comment=PBX

!re=.id=*10000C7=name=Down_Mauro=parent=Down=packet-mark==limit-at=315000=priority=8=max-limit=5000000=burst-limit=0=burst-threshold=0=burst-time=00:00:00=invalid=false=disabled=true

(只贴了3个,还有很多)

我将它们放在一个名为 tree() 的字符串数组中。

我想做的是一个返回新数组的函数,我猜是一个多维数组,它将“=”之间的所有内容分开,从“名称”开始。像这样:

Down-PBX, Down, pack_pbx, 256000, PCQ-DOWN, etc
Up-PBX, UP, pack_pbx, 256000, etc

等等。

任何帮助将不胜感激!谢谢。

4

2 回答 2

2

假设您想要的第一个值始终是数组的第 5 个成员,并且您希望在此之后返回数组中的每个第二个值:

Private Function GetParts(source As String) As String()
    Dim Parts As String() = source.Split(New Char() {"="C})

    Dim Items As New List(Of String)()
    For i As Integer = 4 To Parts.Length - 1 Step 2
        Items.Add(Parts(i))
    Next

    Return Items.ToArray()
End Function

本质上,您从拆分字符串的第 5 部分开始,然后在此之后迭代每个第 2 个元素,将每个元素添加到字符串的通用列表中。然后,您将其作为字符串数组返回。

我这里没有 VB 的副本,因此它可能无法 100% 工作,但它应该为您提供您想要实现的目标的一般要点。我用 C# 编写它,然后尝试将其转换为 VB.Net(手指交叉!)。

于 2013-04-03T18:38:54.413 回答
1

很容易:

Dim output = input.Substring(input.IndexOf("name=") + 5) _
                  .Split("="c) _
                  .Where(Function(e, i) i Mod 2 = 0) _
                  .ToArray()

output内容:

Down-PBX
Down
pack_pbx
256000
PCQ_Down
1
512000
0
0
00:00:00
false
true
PBX

多维版本:

Dim input() As String = {
    "!re=.id=*10000AF=name=Down-PBX=parent=Down=packet-mark=pack_pbx=limit-at=256000=queue=PCQ_Down=priority=1=max-limit=512000=burst-limit=0=burst-threshold=0=burst-time=00:00:00=invalid=false=disabled=true=comment=PBX",
    "!re=.id=*10000B0=name=Up-PBX=parent=Up=packet-mark=pack_pbx=limit-at=256000=queue=PCQ_Up=priority=1=max-limit=512000=burst-limit=0=burst-threshold=0=burst-time=00:00:00=invalid=true=disabled=true=comment=PBX",
    "!re=.id=*10000C7=name=Down_Mauro=parent=Down=packet-mark==limit-at=315000=priority=8=max-limit=5000000=burst-limit=0=burst-threshold=0=burst-time=00:00:00=invalid=false=disabled=true"
}

Dim output = input.Select(Function(i) i.Substring(i.IndexOf("name=") + 5) _
                                       .Split("="c) _
                                       .Where(Function(e, idx) idx Mod 2 = 0) _
                                       .ToArray()) _
                  .ToArray()

outputString()()这里。

于 2013-04-03T18:39:33.167 回答