Заполните массив переменных структуры, прочитав текстовый файл с разделителями
У меня есть текстовый файл с именем games.txt, в котором содержится информация о многих матчах за компьютерные игры. Каждая строка представляет:
Player1Score, Player1Name, Player1Age, Player 2Score, Player2Name, Player2Age
Вот пример из 3 строк (всего их 150):
1, John, 32, 5, Albert, 54
3 Lisa, 33, 2, Michael, 36
4 Jessica, 24, 1 Robert, 32
Я хочу назначить их структурному массиву, в котором каждый элемент имеет 6 переменных-членов, используя StreamReader. Вот структурная переменная:
Structure gameDetails
Public Player1Score As Integer
Public Player1Name As String
Public Player1Age As Integer
Public Player2Score As Integer
Public Player2Name As String
Public Player2Age As Integer
End Structure
Я знаю, что используя запятую в качестве разделителя, я могу записать каждую переменную как отдельный элемент в массиве:
Dim game() as String
game() = inFile.ReadLine.Split(","c)
что приведет к тому, что каждый элемент будет назначен следующим образом:
game(0) = 1
game(1) = John
game(2) = 32
Так далее..
Есть ли способ, которым я могу напрямую назначить все переменные-члены для каждого элемента? Например, каждая запятая разделяет переменную-член, а новая строка означает новый элемент? К сожалению, я не знаком с синтаксисом / командами, поэтому я не знаю, как подойти к этому.
Обратите внимание, что я ничего не могу жестко закодировать, так как приложение предназначено для получения всех данных из.txt.
2 ответа
Просто хотел сказать, что я понял метод, хотя я не уверен, насколько он эффективен. Я закончил тем, что поместил каждую часть каждой строки (разделенных запятыми) в массив. Затем я назначил массив каждой из переменных-членов. Затем я сделал это для каждой переменной:
Dim inFile As System.IO.StreamReader
inFile = New IO.StreamReader("Games.txt")
If IO.File.Exists("Games.txt") Then
Dim upperbound As Integer = Games.GetUpperBound(0)
For i As Integer = 0 To upperbound
'auxilary string
Dim line(6) As String
line = inFile.ReadLine.Split(","c)
Games(i).Player1Score = CInt(line(0))
Games(i).player1Name = line(1)
Games(i).player1Age = CInt(line(2))
Games(i).player2Score = CInt(line(3))
Games(i).player2Name = line(4)
Games(i).player2Age = CInt(line(5))
Next i
End If
Спасибо вам за помощь!
Не могли бы вы попытаться создать метод как часть вашей структуры, который выглядит примерно так:
public Sub MapLineEntry(targetLine() As String)
Player1Score = CInt(targetLine(0))
Player1Name = targetLine(1)
Player1Age = CInt(targetLine(2))
Player2Score = CInt(targetLine(3))
Player2Name = targetLine(4)
Player2Age = CInt(targetLine(5))
End Sub
Вы хотели бы убедиться, что строковый массив имеет правильное количество элементов, но это будет начало.