2016-03-21 115 views
1

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

这里是一对夫妇的故障代码的例子:

| ACAL-000无法运行检测Motn原因:AccuCal2运动未能 纳米。 AccuCal2动作无法启动。补救措施:在执行AccuCal2之前清除所有 错误。 | ACAL-001机器人尚未准备就绪。 原因:机器人未准备好。系统无法发出动作 ,因为它处于错误状态。排除方法:清除所有故障,然后重试 该操作。

如果我搜索"ACAL-000",我希望它ACAL-001之前显示一切从|ACAL-000前了吧。

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

任何帮助,你可以提供将不胜感激。

编辑

这里已推荐什么一些编辑和执行后,我当前的代码。请参阅下面的评论,了解我如何达到这一点的更多信息。简要说明,我目前只是使用“| 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 

回答

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是接受用户输入的错误代码的文本框。

+0

谢谢您的快速回复!我输入了所有的代码,它确实让我更接近,但它显示“错误代码未找到!”每次。我认为这是因为我没有打开我正在正确搜索的文本文件。我将文本文件添加为嵌入式资源,并确保我的项目指向正确的文件。我在文件名“filename.txt”中添加了allErrorText,希望它能够打开并搜索它,因为它是该项目的一部分,但这不起作用。我将如何打开文本文件并在其中搜索? – Kurtis

+0

对不起,我误解了你的问题。上面的代码假设你已经将文件中的文本读入字符串变量。我将在几分钟内编辑以显示如何从文件读取。 –

+0

感谢所有的你的帮助布赖恩! – Kurtis

相关问题