Как прочитать разделенную строку строк и целых и извлечь их для обработки в VB - PullRequest
1 голос
/ 01 июля 2010

У меня есть следующий текстовый файл (ExamMarks.txt)

Джон, 85, 95, 90

Micheal, 60, 75, 75

Я хочу извлечь строку и взять Имя и отдельно и целые числа отдельно.Затем я хочу напечатать имя и среднее число чисел, как это на этикетке:

Среднее значение Джона составляет 90

Среднее значение Мичил составляет 70

До сих пор я могу отображать только то, что находится в текстовом файле в метке (см. Ниже):

Dim FILE_NAME As String = "C:\ExamMarks.txt"
Dim TextLine As String

If System.IO.File.Exists(FILE_NAME) = True Then

  Dim objReader As New System.IO.StreamReader(FILE_NAME)

  Do While objReader.Peek() <> -1
    TextLine = TextLine & objReader.ReadLine & vbNewLine

  Loop

  lblResults.Text = TextLine

Else

  MsgBox("File Does Not Exist")

End If

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 01 июля 2010

Выполните эту обработку для каждой из строк в файле. Предполагается, что имя всегда является первым словом в строке, затем вычисляется среднее значение всех чисел в строке.

'Split the test string on commas
Dim strScores() As String = strTest.Split(",".ToCharArray)
Dim strWord As String
Dim intTotalScore As Integer
Dim intCountOfScores As Integer
Dim intAverageScore As Integer

'Name is the first word in the line
strName = strScores(1).Trim

For Each strWord In strScores
    If IsNumeric(strWord) Then
        intTotalScore = intTotalScore + Int(strWord.Trim)
        intCountOfScores = intCountOfScores + 1
    End If
Next

'Calculate the average    
intAverageScore = intTotalScore / intCountOfScores
0 голосов
/ 02 июля 2010

Вы можете сделать все это более кратко с помощью более современного кода:

  1. Используйте встроенный TextFieldParser , чтобы прочитать файл, разделенный запятыми, и получить доступ к каждой строке.в виде массива строк.Это проще и надежнее, чем использование Split.
  2. И затем использовать IEnumerable методы расширения для вычисления среднего всего в одной строке.
    a. Пропустить (1) пропускает первую запись.
    b. Среднее () позволяет преобразовать оставшиеся записи в Double и затем взять среднее значение.

Как это:

  Sub Main()    
    Using MyReader As New  _
      Microsoft.VisualBasic.FileIO.TextFieldParser("ExamMarks.txt")
      MyReader.TextFieldType = FileIO.FieldType.Delimited
      MyReader.SetDelimiters(",")

      Dim currentRow As String()
      While Not MyReader.EndOfData
        Try
          ' Read row as an array of strings '
          currentRow = MyReader.ReadFields()
          ' Calculate average '
          Dim dAverage As Double = _
            currentRow.Skip(1).Average(Function(s) Convert.ToDouble(s))
          ' Write out result '
          Console.WriteLine(currentRow(0) & "'s average is " & _
            Convert.ToString(dAverage))
        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
          MsgBox("Line " & ex.Message & "is not valid and will be skipped.")
        End Try
      End While
    End Using
    Console.ReadLine()
  End Sub
...