2016-03-21 4 views
1

Ich arbeite an einer VB.net-Anwendung, wo ich eine sehr große Textdatei habe. Es ist im Grunde eine große Datenbank von Fehlercodes mit Beschreibungen, wie man den Code danach löscht. Was ich tun möchte, ist auf Knopfdruck, durchsuchen Sie die Textdatei nach dem spezifischen Code und zeigen Sie den gesamten Text für diesen Fehlercode in einem Textfeld an. Ich habe viele verschiedene Möglichkeiten ausprobiert, bin aber nicht in der Lage, es richtig funktionieren zu lassen. Ich ging durch die gesamte Textdatei und fügte am Anfang jedes Fehlercodes eine "|" hinzu, so dass ich angeben konnte, wo der Code beginnt. HierSuche Textdatei und zeigt einen Teil des Textes in einem Textfeld

ist ein Beispiel für ein paar Fehlercodes:

| ACAL-000 Ausfallen laufen MOTN Ursache DETECT: Die AccuCal2 Bewegung fehlgeschlagen nm. Die AccuCal2-Bewegung kann nicht gestartet werden. Abhilfe: Löschen Sie alle Fehler, bevor Sie AccuCal2 ausführen. | ACAL-001 Roboter ist nicht bereit. Ursache: Der Roboter ist nicht bereit. Das System kann die Bewegung nicht ausgeben, weil es sich in einem Fehlerzustand befindet. Abhilfe: Löschen Sie alle Fehler und wiederholen Sie dann die Operation .

Wenn ich für "ACAL-000" suchen, möchte ich es vor ACAL-001 alles von den | vor ACAL-000 an der Bar zeigen.

Ich würde den Code, den ich geschrieben habe, veröffentlichen, aber ich habe so viele verschiedene Versionen ausprobiert, dass ich nicht wirklich weiß, welchen man posten soll.

Jede Hilfe, die Sie zur Verfügung stellen können, würde sehr geschätzt werden.

EDIT

Hier ist mein aktueller Code nach einiger Bearbeitung und Umsetzung das, was empfohlen wurde. Bitte beachten Sie die Kommentare unten für weitere Informationen, wie ich zu diesem Punkt kam. Eine kurze Anmerkung, ich benutze gerade "| ACAL-000" für eine Testsuche. Wenn dies abgeschlossen ist, habe ich einen anderen (bereits funktionierenden) Code, der einen Code aus einigen Dropdown-Listen zusammenstellt.

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 

Antwort

0

Hier ist eine Funktion, die tun sollten, was Sie wollen:

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

wo txtErrorMessage ist:

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 

In Ihrem Click-Ereignishandler Schaltfläche Sie die Funktion wie folgt aufrufen können Ausgabe Textfeld, um das Ergebnis der Fehlermeldung anzuzeigen, My.Resources.FanucCodes ist Ihre große Zeichenfolge Ressource enthält alle Fehlerbeschreibungen (mit | Trennzeichen) und txtErrorCodeToLookFor ist ein Textfeld, das die Eingabe des Fehlercodes vom Benutzer akzeptiert.

+0

Vielen Dank für Ihre schnelle Antwort! Ich habe den ganzen Code eingegeben und es hat mich definitiv näher gebracht, aber es wird "Fehlercode nicht gefunden!" Angezeigt. jedes Mal. Ich denke, das liegt daran, dass ich die Textdatei, die ich suche, nicht öffne. Ich habe die Textdatei als eingebettete Ressource hinzugefügt und sichergestellt, dass mein Projekt auf die richtige Datei verweist. Ich habe meinen Dateinamen "filename.txt" an Stelle von allErrorText hinzugefügt, in der Hoffnung, dass es es öffnen und durchsuchen würde, da es Teil des Projekts ist, aber das hat nicht funktioniert. Wie würde ich die Textdatei öffnen und sie darin suchen lassen? – Kurtis

+0

Entschuldigung, ich habe Ihre Frage falsch gelesen.Der obige Code geht davon aus, dass Sie den Text aus der Datei bereits in eine String-Variable gelesen haben. Ich werde in wenigen Minuten bearbeiten, um zu zeigen, wie man aus einer Datei liest. –

+0

Danke für Ihre Hilfe Brian! – Kurtis

Verwandte Themen