搜索文本文件并在文本框中显示部分文本

时间:2016-03-21 16:11:44

标签: vb.net

我正在开发一个VB.net应用程序,我有一个非常大的文本文件。它基本上是一个大型错误代码数据库,其中包含如何清除代码后的代码。我想做的是点击一个按钮,在文本文件中搜索特定代码,并将该错误代码的所有文本显示在文本框中。我尝试了很多不同的方法,但我无法让它正常工作。我浏览了整个文本文件,并在每个故障代码的开头添加了"|",以便我可以指定代码的起始位置。

以下是几个故障代码的示例:

  

| ACAL-000无法运行DETECT Motn原因:AccuCal2 Motion失败   纳米。无法启动AccuCal2运动。补救措施:清除所有   执行AccuCal2之前的错误。 | ACAL-001机器人尚未就绪。   原因:机器人尚未就绪。系统无法发出动作   因为它处于错误状态。补救措施:清除所有故障,然后重试   操作。

如果我搜索"ACAL-000",我希望它显示|之前的ACAL-000ACAL-001之前的栏中的所有内容。

我会发布我编写的代码,但是我尝试了很多不同的版本,我真的不知道要发布哪个版本。

非常感谢您提供的任何帮助。

修改

这是我对目前的代码进行了一些编辑和实施后的建议。请参阅下面的评论,了解有关我如何达到这一点的更多信息。快速说明,我目前只是使用“| ACAL-000”进行测试搜索。完成后,我还有一些其他(已经在工作的)代码,它会将来自几个下拉列表的代码放在一起。

Function ReadEmbeddedTextFileResource(embeddedResourceName As String) As String

    Using stream As Stream = Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedResourceName)

        If stream Is Nothing Then
            Throw New FileNotFoundException("The resource '" & embeddedResourceName & "' was not found.")
        End If

        Using reader As StreamReader = New StreamReader(stream, True)
            Return reader.ReadToEnd()
        End Using

    End Using

End Function

Function FindTextBetweenBars(bodyOfTextToSearch As String, textToLookFor As String) As String

    Dim i As Integer = bodyOfTextToSearch.IndexOf(textToLookFor)
    If i < 0 Then Return Nothing

    Dim j As Integer = bodyOfTextToSearch.LastIndexOf("|", i)
    If j < 0 Then j = 0

    Dim k As Integer = bodyOfTextToSearch.IndexOf("|", i + Len(textToLookFor))
    If k < 0 Then k = Len(bodyOfTextToSearch)

    Return bodyOfTextToSearch.Substring(j + 1, k - j - 1)

End Function

Private Sub btnShowTroubleshooting_Click(sender As Object, e As EventArgs) Handles btnShowTroubleshooting.Click
    Dim allErrorText As String = ReadEmbeddedTextFileResource(My.Resources.FanucCodes)
    Dim errorMessage As String = FindTextBetweenBars(allErrorText, "|ACAL-000")
    If errorMessage Is Nothing Then errorMessage = "Error code Not found!"
    RichTextBoxFanucFaults.Text = errorMessage

End Sub

1 个答案:

答案 0 :(得分:0)

这是一个应该做你想做的功能:

Function FindTextBetweenBars(bodyOfTextToSearch As String, textToLookFor As String) As String

    Dim i As Integer = bodyOfTextToSearch.IndexOf(textToLookFor)
    If i < 0 Then Return Nothing

    Dim j As Integer = bodyOfTextToSearch.LastIndexOf("|", i)
    Dim k As Integer = bodyOfTextToSearch.IndexOf("|", i + Len(textToLookFor))
    If k < 0 Then k = Len(bodyOfTextToSearch)

    Return bodyOfTextToSearch.Substring(j + 1, k - j - 1)

End Function

在按钮单击事件处理程序中,您可以像这样调用函数:

Dim errorMessage as String = FindTextBetweenBars(My.Resources.FanucCodes, txtErrorCodeToLookFor.Text)
If errorMessage Is Nothing Then errorMessage = "Error code not found!"
txtErrorMessage.Text = errorMessage

其中txtErrorMessage是显示错误消息结果的输出文本框, My.Resources.FanucCodes是包含所有错误说明(包含|分隔符)的大字符串资源,txtErrorCodeToLookFor是一个接受用户输入错误代码的文本框。