所以我一直在查看.NET中的File.ReadAllText
函数,我已经找到了如何搜索文本文件以匹配字符串,但是......
如何搜索每行基础?例如,假设我有一个文本文件,如下所示
Names
HarryS1
HarryS2
HarryS3
当然我可以使用类似的东西:
Dim text As String = File.ReadAllText("names.txt")
Dim index As Integer = text.IndexOf(HarryS)
If index >= 0 Then
MessageBox.Show("Name Found")
Else
MessageBox.Show("Name not found")
End If
然而,它总是会说它被发现是因为HarryS在文本文件中不止一次存在。 - 我是否需要使用正则表达式来搜索字符串?或者我可以让它检查每行基础吗?
答案 0 :(得分:0)
它说text.IndexOf(HarryS)。不应该说text.IndexOf(" HarryS")?无论如何,根据您的性能和灵活性要求,您可以采用多种方法来实现目标。在您的情况下,最简单的检查是:
Try
Dim text As String = vbCrLf & System.IO.File.ReadAllText("C:\Temp\names.txt") & vbCrLf
Dim index As Integer = text.IndexOf(vbCrLf & "HarryS2" & vbCrLf)
If index >= 0 Then
MessageBox.Show("Name Found")
Else
MessageBox.Show("Name not found")
End If
Catch ex As Exception
MessageBox.Show("Exception found!" & vbCrLf & ex.ToString)
End Try
如果你需要进一步的灵活性,我能想到的最强大的方法就是通过LINQ和一个RegEx表达式。
答案 1 :(得分:-1)
Try
FileOpen(1, "FilePath", OpenMode.Input, OpenAccess.Read, OpenShare.LockWrite)
Dim found As Boolean = False
While (EOF(1) = 0)
Dim readData As String = LineInput(1)
If readData = "HarryS" Then
found = True
Exit While
End If
End While
If found = True Then
MsgBox("Found")
Else
MsgBox("Not found")
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
Finally
FileClose(1)
End Try
此处FileOpen
函数使用参数打开文件路径,并使用数字1
的键引用。这是将文件数据或任何其他事务与文件一起引用的关键。然后变量found
用于确认文件内的查找。接下来,我们使用While循环从文件中获取数据。函数LineInput(1)
就是你的答案,逐行获取数据表格作为字符串数据类型。然后我们可以比较字符串比较数据并搜索整个文件以进行匹配。当我们找到匹配项时,我们会更改变量found = True
的值。然后在循环之后我们创建另一个比较以确保查找并使用消息框抛出响应。最后,FileClose
函数关闭文件。
答案 2 :(得分:-2)
Imports System
Imports System.IO
Imports System.Text
Public Class Test
Public Shared Sub Main()
Dim path As String = "c:\temp\MyTest.txt"
Try
If File.Exists(path) Then
File.Delete(path)
End If
Dim sw As StreamWriter = New StreamWriter(path)
sw.WriteLine("This")
sw.WriteLine("is some text")
sw.WriteLine("to test")
sw.WriteLine("Reading")
sw.Close()
Dim sr As StreamReader = New StreamReader(path)
Do While sr.Peek() >= 0
Dim text As String = sr.ReadLine()
Dim index As Integer = text.IndexOf(HarryS)
If index >= 0 Then
MessageBox.Show("Name Found")
Else
MessageBox.Show("Name not found")
End If
Loop
sr.Close()
Catch e As Exception
Console.WriteLine("The process failed: {0}", e.ToString())
End Try
End Sub
End Class