2016-03-21 13 views
1

非常に大きなテキストファイルがあるVB.netアプリケーションで作業しています。これは、基本的に、エラーコードの大きなデータベースであり、後にコードをクリアする方法の説明です。私がしたいのは、ボタンをクリックするだけで、特定のコードのテキストファイルを検索し、そのエラーコードのすべてのテキストをテキストボックスに表示します。私はいろいろな方法で試しましたが、正しく動作させることができません。テキストファイル全体を調べて、それぞれのフォルトコードの先頭に"|"を追加して、コードの開始位置を指定できるようにしました。ここでテキストファイルを検索し、テキストの一部をテキストボックスに表示

はカップルの故障コードの例です:

| ACAL-000失敗MOTN原因を検出するために実行:AccuCal2モーションは nmまで失敗しました。 AccuCal2モーションを開始することはできません。対処法:AccuCal2を実行する前にすべての エラーをクリアしてください。 | ACAL-001ロボットが準備ができていません。 原因:ロボットが準備ができていません。エラー状態であるため、システムは モーションを発行できません。対処:すべての障害をクリアしてから、操作を再試行してください。

私は"ACAL-000"を検索する場合、私はそれがACAL-001ACAL-000|からバーにすべてを示したいと思います。

私は書いたコードを投稿しますが、投稿するコードが実際にはわからないほど多くの異なるバージョンを試しました。

ご提供いただけるご支援をいただければ幸いです。

EDIT

は、ここで推奨されているもののいくつかの編集と実施後の私の現在のコードです。私がこの点にどのように到達したかについての詳細は下記のコメントをご覧ください。簡単なことに、私は現在、テストの検索に「| 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 

あなたはこのように関数を呼び出すことができます。txtErrorMessageがある

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

をエラーメッセージの結果を表示するための出力テキストボックス My.Resources.FanucCodesは、すべてのエラーの説明を含む大きな文字列リソースです(|セパレータ)、txtErrorCodeToLookForは、ユーザーからのエラーコード入力を受け付けるテキストボックスです。

+0

ご返信いただきありがとうございます。私はすべてのコードを入力したが、それは間違いなく私をもっと近づけたが、「エラーコードが見つかりません」と表示されます。毎回。これは、私が適切に検索しているテキストファイルを開いていないためです。テキストファイルを埋め込みリソースとして追加し、プロジェクトが正しいファイルを指していることを確認しました。 allErrorTextの代わりにファイル名 "filename.txt"を追加して、プロジェクトの一部であるためオープンして検索することを期待していましたが、動作しませんでした。テキストファイルを開いて、それを検索するにはどうすればいいですか? – Kurtis

+0

申し訳ありませんが、私はあなたの質問を誤解しました。上記のコードでは、ファイルから文字列変数にテキストを読み込んだことを前提としています。ファイルから読み込む方法を示すために数分で編集します。 –

+0

あなたの助けてくれてありがとうBrian! – Kurtis

関連する問題