Чтение строк из текстового файла в VB.NET
У меня есть формат текстового файла:
*******************************************************************************
* Mitecs Test Plan *
*******************************************************************************
[PRODUCTN]
FQA=3F.4.W0,41,1
RSC=3F.5.W4,36,1
CFG=3F.9.2J,234,1
[MASTERREV]
MTP=3F.R.WM
[FQA 13]
FQA=3F.4.W0,41,1
CFG=3F.9.2J,263,1
[FQA 14]
FQA=3F.4.W0,160,1
CFG=3F.9.2J,315,1
Я хочу прочитать текст и отобразить его в списке, что-то вроде ниже:
[PRODUCTN]
[MASTERREV]
[FQA 13]
[FQA 14]
На изображении выше, когда я выбираю пункт [FQA 14] в списке 1 и щелкаю по кнопке подкачки, он должен отображаться в следующем формате в списке 2 как
Code Name Version
160 FQA 3F.4.W0
315 CFG 3F.9.2J
1 ответ
Решение
Один из вариантов - использовать класс для хранения каждой записи и переопределить функцию ToString для возврата заголовка. Теперь вы можете добавить каждую запись непосредственно в listbox1, и она покажет заголовок, представляющий элемент. Поскольку каждый элемент списка на самом деле является объектом, вы можете привести выбранный элемент в качестве класса записи и прочитать данные из объекта. Вот один из способов сделать это:
Public Class Entry
Public Property Title As String = ""
Public Property Data As New List(Of String)
Public Overrides Function ToString() As String
Return Title
End Function
End Class
Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim sr As New StreamReader("textfile1.txt")
Do Until (sr.EndOfStream)
Dim line As String = sr.ReadLine.Trim
If line.StartsWith("[") Then
Dim newentry As New Entry
newentry.Title = line
Do Until (line = "" OrElse sr.EndOfStream)
line = sr.ReadLine.Trim
If Not line = "" Then
newentry.Data.Add(line)
End If
Loop
ListBox1.Items.Add(newentry)
End If
Loop
End Sub
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
Dim selectedentry As Entry = DirectCast(DirectCast(sender, ListBox).SelectedItem, Entry)
ListBox2.Items.Clear()
For Each datum In selectedentry.Data
Dim line As String() = datum.Split("=,".ToCharArray, StringSplitOptions.RemoveEmptyEntries)
If line.Count > 2 Then
ListBox2.Items.Add(line(2) + vbTab + line(0) + vbTab + line(1))
Else
ListBox2.Items.Add(" " + vbTab + line(0) + vbTab + line(1))
End If
Next
End Sub