在VB.NET中循环浏览文本文件的行

在VB.NET中循环浏览文本文件的行,vb.net,loops,visual-studio-2008,text,Vb.net,Loops,Visual Studio 2008,Text,我有一个文本文件,里面有几行文本 我想在每一行循环,直到找到我想要的项目*,然后以标签的形式在屏幕上显示它 *我正在通过文本框搜索该项目 也就是说,在sudo: For i = 0 To number of lines in text file If txtsearch.text = row(i).text Then lbl1.text = row(i).text Next i 您可以使用,以便在整个文件中一次迭代一行。下面是一个简单的例子: Dim Term

我有一个文本文件,里面有几行文本

我想在每一行循环,直到找到我想要的项目*,然后以标签的形式在屏幕上显示它

*我正在通过文本框搜索该项目

也就是说,在sudo:

For i = 0 To number of lines in text file
    If txtsearch.text = row(i).text Then
        lbl1.text = row(i).text
Next i
您可以使用,以便在整个文件中一次迭代一行。下面是一个简单的例子:

    Dim Term As String = "Your term"
    For Each Line As String In File.ReadLines("Your file path")
        If Line.Contains(Term) = True Then
            ' Do something...Print the line
            Exit For
        End If
    Next

下面是一个函数,它将从包含搜索词的行中吐回字符串

  Public Shared Function SearchFile(ByVal strFilePath As String, ByVal strSearchTerm As String) As String
    Dim sr As StreamReader = New StreamReader(strFilePath)
    Dim strLine As String = String.Empty

    Try
        Do While sr.Peek() >= 0
            strLine = String.Empty
            strLine = sr.ReadLine
            If strLine.Contains(strSearchTerm) Then
                sr.Close()
                Exit Do
            End If
        Loop

        Return strLine
    Catch ex As Exception
        Return String.Empty
    End Try
  End Function
要使用该功能,您可以执行以下操作

 Dim strText As String = SearchFile(FileName, SearchTerm)
 If strText <> String.Empty Then
   Label1.Text = strText
 End If
Dim strText As String=SearchFile(文件名,SearchTerm)
如果strText字符串为空,则
Label1.Text=strText
如果结束

如果我们希望文本文件将“*.txt”放在“*XML”的位置,则循环并获取目录中的所有XML文件

Dim目录作为新IO.DirectoryInfo(路径)


可能不止一次吗?一旦找到你想要的是什么,单词还是整行?请提供更多的细节…对不起,在重读之后,它确实听起来有点模糊,我想要那一行的所有文本。一行的出现次数不会超过一次。您可以添加UI的屏幕截图吗?输入文件的示例?程序输出示例?一次一行是ReadLines,realllines是一次读取所有行。@neolick实际上,它们都可以工作。ReadAllLines确实会一次读取所有行,但我们仍然可以一次迭代一行。请提供更多关于你投反对票原因的信息。@Eminem:我通常要么投反对票,要么留下评论。我的理由是,否决权并不能帮助人们进步。但有时我就是找不到语言,或者那个人太固执和/或傲慢,所以现在是时候投否决票了。您说过使用ReadAllLines一次迭代一行。因为迭代不假设流式处理,所以存在混淆。你的文章可能会被读者误解。StackOverflow通常被视为“真理之源”。现在,因为流是一次一行的(即使相反的不是真的),所以事实是不正确的。@Neolisk Readlines仅在读取时才需要,另一方面,ReadAllLines在可以迭代和检查之前被放入数组中。因此,就目前情况而言,他的答案是好的,而且更充分。在我的回答的另一个方面,File.ReadLines比原始StreamReader稍微慢一点,但没有明显慢一点。这是预期的结果,因为File.ReadLines只是在内部创建了一个ReadLinesIterator,它使用StreamReader并在此过程中执行一些额外的检查。这里有一些基准测试来确认@MrCoDeXeR:底线是,OP可以根据其需求使用流。上述答案不建议使用流。因此,我没有投赞成票。也没有向下投票,因为它没有错,只是效率低下。为了与我对另一个答案的建议保持一致,我对你的答案进行了向上投票,因为它建议使用streams-保持简单。我尝试将此解决方案用于非常类似的情况,但要在多行CSV中找到一个整数值(并且只有一个整数值),每行包含两个双精度和一个整数。我将第二个函数参数更改为“ByVal intSearchNum As Integer”,但即使它检测到传入的整数值是其中一个double的一部分,它仍然返回true。因此,一个包含双精度值6.67的行作为与整数值67的匹配返回,这是我不希望看到的。
    Dim allFiles As IO.FileInfo() = Directory.GetFiles("*.xml")
    allFiles = allFiles.OrderByDescending(Function(x) x.FullName).ToArray()
    Dim singleFile As IO.FileInfo


    For Each singleFile In allFiles
        'ds.ReadXml(singleFile)
        xd.Load(singleFile.FullName)

        Dim nodes As XmlNodeList = xd.DocumentElement.SelectNodes("/ORDER/ORDER_HEADER")
        Dim ORDER_NO As String = " "
        For Each node As XmlNode In nodes
            If Not node.SelectSingleNode("ORDER_NO") Is Nothing Then
                ORDER_NO = node.SelectSingleNode("ORDER_NO").InnerText
            End If
        Next

    Next