匹配新行上的字符串?

时间:2014-04-15 22:54:21

标签: .net string

所以我一直在查看.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在文本文件中不止一次存在。 - 我是否需要使用正则表达式来搜索字符串?或者我可以让它检查每行基础吗?

3 个答案:

答案 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)

来源:StreamReader.ReadLine

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