如何从文本文件vb.net中搜索和显示特定行

时间:2018-04-19 19:44:58

标签: vb.net visual-studio line

您好我正在尝试搜索一行,其中包含用户在文本框中输入的内容并显示整行。单击按钮后,下面的代码没有显示消息框,我不确定是否找到了记录

   Dim filename, sr As String
    filename = My.Application.Info.DirectoryPath + "\" + "mul.txt"

    Dim file As String()
    Dim i As Integer = 0
    file = IO.File.ReadAllLines(filename)
    Dim found As Boolean
    Dim linecontain As Char

    sr = txtsr.ToString



    For Each line As String In file
        If line.Contains(sr) Then
            found = True
            Exit For
        End If
        i += 1
        If found = True Then
            MsgBox(line(i))
        End If


    Next



End Sub

1 个答案:

答案 0 :(得分:1)

您应该在此处拨打ReadLines而不是ReadAllLines。不同之处在于ReadAllLines首先将整个文件内容读入数组,然后才能开始处理任何数据,而ReadLines在处理完前一行之前不会读取一行。如果您希望随机访问整个文件,或者您希望多次处理数据,那么ReadAllLines会很好。如果您想在某条线满足某些条件时停止处理数据,那么ReadLines就很好。如果您正在查找包含某些文字的行,并且您的文件中包含第一行匹配的一百万行,ReadAllLines将读取所有一百万行,而ReadLines只会读取第一

所以,这里是显示包含特定文本的第一行的方式:

For Each line In File.ReadLines(filePath)
    If line.Contains(substring) Then
        MessageBox.Show(line)
        Exit For
    End If
Next

关于原始代码,使用i毫无意义。您似乎正在使用i作为行计数器,但没有必要,因为您正在使用For Each循环,因此line包含该行。如果您已经拥有该行,为什么需要按索引获取该行?此外,当您尝试显示消息时,您使用i索引line,这意味着您将从该行获取单个字符,而不是从该行获取单行阵列。如果该行的索引大于该行中的字符数,那么就会抛出一个IndexOutOfRangeException,我猜这是你发生的事情。

这是编写代码而不知道它实际上必须先做什么的。如果您在编写代码之前已经写出了算法,那么很明显代码并没有实现算法。如果你没有算法,你没有什么可以比较你的代码,以确保它是有道理的。