我正在开发一个VB.net应用程序,我有一个非常大的文本文件。它基本上是一个大型错误代码数据库,其中包含如何清除代码后的代码。我想做的是点击一个按钮,在文本文件中搜索特定代码,并将该错误代码的所有文本显示在文本框中。我尝试了很多不同的方法,但我无法让它正常工作。我浏览了整个文本文件,并在每个故障代码的开头添加了"|"
,以便我可以指定代码的起始位置。
以下是几个故障代码的示例:
| ACAL-000无法运行DETECT Motn原因:AccuCal2 Motion失败 纳米。无法启动AccuCal2运动。补救措施:清除所有 执行AccuCal2之前的错误。 | ACAL-001机器人尚未就绪。 原因:机器人尚未就绪。系统无法发出动作 因为它处于错误状态。补救措施:清除所有故障,然后重试 操作。
如果我搜索"ACAL-000"
,我希望它显示|
之前的ACAL-000
到ACAL-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
答案 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
是一个接受用户输入错误代码的文本框。