2013-03-18 35 views
0

我有音乐列表,看起来像这样的文本文件:获取符之间的文本字符串中的

BeginSong{ 
Song Name 
Artist 
Genre 
}EndSong 

这方面有多个实例。

我想获取BeginSong{}EndSong之间的文本,并将歌曲信息 放入字符串数组中。然后,我想将每个实例添加到列表框中作为艺术家 - 歌曲名称 (但我确信我可以弄清楚这一点)。我希望这是一个明确的描述。

+5

为什么当你使用的是VS2010和VB.net陈述VB6标签要求? – 2013-03-18 02:17:59

+0

为什么不使用现有的标准,如CSV或XML/JSON? – Deanna 2013-03-18 21:30:31

回答

1

使用的FileStream

ReadLine()功能,因为你已经知道的信息的顺序,你应该能够循环中的所有文件行,并将它们存储在他们相应的属性。

伪:

WHILE Reader.Read() 
     Store Line in BeginSongTextVariable 
     Read Next Line 
     Store Line in SongNameVariable 
     Read Next Line 
     Store Line in ArtistNameVariable 
     Read Next Line 
     Store Line in GenreVariable 
     Read Next Line 
     Store Line in EndSongTextVariable 
Add The Above Variables in List 
End While 
0

您可以使用正则表达式与命名组:

BeginSong{\n(?<song_name>.*)\n(?<artist>.*)\n(?<genre>.*)\n}EndSong 

事情是这样的:

Imports System.Text.RegularExpressions 
'... 
Dim s As New Regex("BeginSong{\n(?<song_name>.*)\n(?<artist>.*)\n(?<genre>.*)\n}EndSong") 
Dim mc As MatchCollection = s.Matches(inputFile) 
For Each m As Match In mc 
    Dim song_name As String = m.Groups("song_name").Value 
    Dim artist As String = m.Groups("artist").Value 
    Dim genre As String = m.Groups("genre").Value 
    'use or store these values as planned 
Next 
0

有来自Neolisk一个很好的答案,它使用常用表达。但是,既然您还包含了VB.NET标签,我将在VB6解决方案中进行一些尝试。

您可以使用字符串分割功能,和分裂的“目的”,即"BeginSong{""}EndSong"

Dim songInfos As String 
Dim firstArray() As String 
Dim secondArray() As String 
Dim thirdArray() As String 
Dim songInfoArray() As String 
Dim i As Integer 
Dim songCounter As Integer 
' to test: 
songInfos = songInfos & "BeginSong{" & vbNewLine 
songInfos = songInfos & "Song Name1" & vbNewLine 
songInfos = songInfos & "Artist1" & vbNewLine 
songInfos = songInfos & "Genre1" & vbNewLine 
songInfos = songInfos & "}EndSong" & vbNewLine 
songInfos = songInfos & "BeginSong{" & vbNewLine 
songInfos = songInfos & "Song Name2" & vbNewLine 
songInfos = songInfos & "Artist2" & vbNewLine 
songInfos = songInfos & "Genre2" & vbNewLine 
songInfos = songInfos & "}EndSong" 

firstArray = Split(songInfos, "BeginSong{") 

songCounter = 0 

ReDim songInfoArray(2, 0) 

For i = 1 To UBound(firstArray) Step 1 
    secondArray = Split(firstArray(i), "}EndSong") 
    thirdArray = Split(secondArray(0), vbNewLine) 
    songInfoArray(0, songCounter) = thirdArray(1) 
    songInfoArray(1, songCounter) = thirdArray(2) 
    songInfoArray(2, songCounter) = thirdArray(3) 
    songCounter = songCounter + 1 
    If i < UBound(firstArray) Then 
     ReDim Preserve songInfoArray(2, songCounter) 
    End If 
Next i 

最后一行后的手表。注意songInfoArray的结构,这是因为它是ReDim配有

enter image description here

相关问题