我有音乐列表,看起来像这样的文本文件:获取符之间的文本字符串中的
BeginSong{
Song Name
Artist
Genre
}EndSong
这方面有多个实例。
我想获取BeginSong{
和}EndSong
之间的文本,并将歌曲信息 放入字符串数组中。然后,我想将每个实例添加到列表框中作为艺术家 - 歌曲名称 (但我确信我可以弄清楚这一点)。我希望这是一个明确的描述。
我有音乐列表,看起来像这样的文本文件:获取符之间的文本字符串中的
BeginSong{
Song Name
Artist
Genre
}EndSong
这方面有多个实例。
我想获取BeginSong{
和}EndSong
之间的文本,并将歌曲信息 放入字符串数组中。然后,我想将每个实例添加到列表框中作为艺术家 - 歌曲名称 (但我确信我可以弄清楚这一点)。我希望这是一个明确的描述。
使用的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
您可以使用正则表达式与命名组:
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
有来自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
配有
为什么当你使用的是VS2010和VB.net陈述VB6标签要求? – 2013-03-18 02:17:59
为什么不使用现有的标准,如CSV或XML/JSON? – Deanna 2013-03-18 21:30:31