Если вы не знаете, сколько строк, то присутствуют в текстовом файле вы может использовать метод File.ReadAllLines для загрузки всех строк в памяти, а затем применить вашу логику
Dim HourSum As Integer
Private Sub Change()
Dim lines = File.ReadAllLines("Daycounts.txt")
Dim sum As Integer = 0
For Each line In lines
If line.Substring(0, 2) <> "G." Then
sum += Convert.ToInt32(line.Substring(line.Length - 2, 2))
Else
....
End If
Next
HourSum = sum
End Sub
Это несколько неэффективно, потому что цикл по строкам в два раза (один читать их, и один, чтобы применить логику), но с небольшим набором строк это не должно быть большая проблема
Однако вы также можете использовать File.ReadLines, которые начнут перечисление ваших строк, не загружая их все в память. According to this question, блокировки ReadLines записывают ваш файл до конца вашего цикла чтения, поэтому, возможно, это может быть лучшим вариантом для вас, только если у вас нет чего-то внешнего для вашего кода, написанного одновременно с файлом.
Dim HourSum As Integer
Private Sub Change()
Dim sum As Integer = 0
For Each line In File.ReadLines("Daycounts.txt")
If line.Substring(0, 2) <> "G." Then
sum += Convert.ToInt32(line.Substring(line.Length - 2, 2))
Else
....
End If
Next
HourSum = sum
End Sub
Кстати, обратите внимание, что я добавил преобразование в целое число против загруженной строки. В вашем коде операция суммы применяется непосредственно к строке. Это может работать только в том случае, если для вашего проекта установлено значение Option Strict. Этот параметр является очень плохой практикой, поддерживаемой для совместимости с VB6 и должен быть изменен на Option Strict On
для новых проектов VB.NET.
Использовать File.ReadAllLines вместо – Steve
Как это сделать? Я также использовал это: Dim a As String = R.ReadToEnd не работает как – Macukadam