我有一个Streamreader,它在检查Daycounts.txt中的每一行后都会出现错误。它不是一个稳定的txt文件。其中的字符串行不稳定。线条数量不断增加或减少。这就是为什么我使用0到167的范围。但是
以下是Daycounts.txt的内容:Daycounts
Dim HourSum as integer
Private Sub Change()
Dim R As IO.StreamReader
R = New IO.StreamReader("Daycounts.txt")
Dim sum As Integer = 0
For p = 0 To 167
Dim a As String = R.ReadLine
If a.Substring(0, 2) <> "G." Then
sum += a.Substring(a.Length - 2, 2)
Else
End If
Next
HourSum = sum
R.Close()
End Sub
答案 0 :(得分:1)
如果您不知道文本文件中有多少行,那么您可以使用方法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
顺便提一下,请注意我已经针对加载的行添加了转换为整数。在您的代码中,sum操作直接应用于字符串。只有在项目的Option Strict设置为“关闭”时,此功能才有效。对于VB6兼容性而言,此设置是一种非常糟糕的做法,对于新的VB.NET项目,应该更改为Option Strict On