在VB.NET中循环浏览文本文件的行
我有一个文本文件,里面有几行文本 我想在每一行循环,直到找到我想要的项目*,然后以标签的形式在屏幕上显示它 *我正在通过文本框搜索该项目 也就是说,在sudo:在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
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