【问题标题】:Readline Error While Reading From .txt file in vb.net从 vb.net 中的 .txt 文件读取时出现 Readline 错误
【发布时间】:2016-06-02 00:46:28
【问题描述】:

我有一个 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

【问题讨论】:

  • 改用 File.ReadAllLines
  • 我该怎么做?我也用过这个:Dim a As String = R.ReadToEnd not working as well

标签: vb.net error-handling


【解决方案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

顺便说一下,请注意,我已经针对加载的行添加了一个整数转换。在您的代码中,求和运算直接应用于字符串。仅当您将项目的 Option Strict 设置为 Off 时,这才有效。为 VB6 兼容性维护此设置是一个非常糟糕的做法,应将新的 VB.NET 项目更改为 Option Strict On

【讨论】:

  • 谢谢。这就是我要找的!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2021-05-09
  • 2016-07-04
  • 1970-01-01
相关资源
最近更新 更多