【问题标题】:Visual Basic reading text fileVisual Basic 读取文本文件
【发布时间】:2014-02-08 10:17:51
【问题描述】:

VB 应该读取每一行并仅显示相应的“ItemNo”,但是它所做的只是读取我的代码的最后一行并显示它,如果我输入一个项目编号,它也不会返回我的消息尚不存在。有什么方法可以纠正这个问题,以便它只选择具有相应“ItemNo”的行,并在找不到号码时返回我的消息。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles CheckNum.Click
    Dim File As String = "K:\Access to Computing Folder\Monday\Nicholas Kakou\Assignments\Assignment 2\MicroNut Software Ltd\MicroNut Software Ltd\Data Files\StockFile.dat"

    Dim TextLine As String = ""

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

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

        Do While objReader.Peek() <> -1

            TextLine = objReader.ReadLine() & vbNewLine

        Loop
        MsgBox(TextLine)
    Else
        MsgBox("File Does Not Exist", MsgBoxStyle.OkOnly)

    End If
End Sub

【问题讨论】:

  • 好吧,我们不会做你的功课。但是我们可以说的是单步执行您的代码以查看发生了什么。我可以首先告诉您,您在读取的每一行上都会覆盖 TextLine 变量,因此读取的最后一行就是您将在消息框中得到的内容。 (使用 MessageBox.Show 而不是 MsgBox)
  • 我不是要你做我的“功课”,我是问我哪里出错了。我的帖子中没有任何地方说为我做这个。
  • 当然,但它是这样提出的。但是,我确实为您提供了一个很好的开端,说明您为什么只显示最后一行……我们希望确保您确实为自己的利益而学习……仅此而已。 :)
  • 我将代码更改为您建议的方式,但它仍然会产生相同的错误。我应该在哪里删除 TextLine 变量?
  • 哪个错误?它对我来说很好......我认为你没有完全按照我的建议做:) 你正在逐行阅读文件中的所有行。当它完成阅读时,您会显示一个 msgbox - 这将显示您阅读的最后一行。

标签: vb.net visual-studio-2013


【解决方案1】:

不是很清楚,但是假设您正在文本文件中搜索特定的字符串,那么您可以这样写

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles CheckNum.Click
    Dim FileName As String = ".........."
    If System.IO.File.Exists(FileName) = True Then
        Dim result = File.ReadLines(FileName)
        Dim line = result.Where(Function (x) x.Contains("ItemNo")).FirstOrDefault()
        If line Is Nothing Then 
             MsgBox.Show("Not Found")
        Else
             MsgBox.Show(line)
        End If
    Else
        MsgBox.Show("File Not Found")
    End If
End Sub

我用的是固定字符串“ItemNo”,你应该把它改成包含搜索文本的变量

注意File.ReadLines 的用法,该方法不会读取内存中的整个文件,并允许使用 lambda 表达式开始搜索结果集合

【讨论】:

  • 我尝试了代码并修改了变量,但随后它向我抛出了此错误“System.Core.dll 中发生了'System.ArgumentNullException' 类型的未处理异常”。我知道这意味着它找不到变量,但我已经完全按照我在 .dat 文件中所做的那样输入了它。 If System.IO.File.Exists(FileName) = True Then Dim result = ReadLines(FileName) Dim line = result.Where(Function(x) x.Contains(" ItemNo:")).FirstOrDefault() If line Is Nothing Then MessageBox.Show("Not Found") Else MessageBox.Show(line) End If Else MessageBox.Show("File Not Found")
  • 如果我这样做了,它会说文件不可访问,因为它是保护级别(我从该表达式中理解的是未定义)
  • 好吧,您可以使用 System.IO.File.ReadLines(...) 或添加 Imports System.IO 以避免这种不必要的输入
猜你喜欢
  • 1970-01-01
  • 2017-10-20
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多