VB-Script zum Lesen eines bereichs aus einer Textdatei
Hallo. ich habe ein Problem.
Ich habe eine Maschine mit einem Panel auf dem Windows CE läuft. die Software zur visualisierung kann VB-Scripte verarbeiten.
mit einem programm lese ich bestimmte Fehlernummern aus.
Von Siemens gibt es ein handbuch das zu jeder Fehlernummer eine genaue beschreibung hat. Dieses handbuch habe ich in eine TXT kopiert.
hier ein ausschnitt der TXT:
mein Ziel ist es einem Script die Fehlernummer zu übergeben. Das Script soll dann aus der großen TXT Datei die Erklärung zum Fehler ausgeben.
das bedeutet:
würde jetzt "F01000" übergeben werden soll eine TXT erzeugt werden mit dem inhalt:
sozusagen muss der bereich zwischen F01000 und F01001 in eine neue TXT geschrieben werden.
Ich habe auch schon ein programmbeispiel gefunden das genau das kann:
Führe ich dieses Script in EXCEL aus macht es aber schonmal genau das was ich will.
leider ist das aber kein VB-Script und somit für mich unbrauchbar.
Villeicht ist ja jemand da draußen der mir einen Tipp geben kann das das Programm in ein VB-Script umschreiben kann.
Ich habe eine Maschine mit einem Panel auf dem Windows CE läuft. die Software zur visualisierung kann VB-Scripte verarbeiten.
mit einem programm lese ich bestimmte Fehlernummern aus.
Von Siemens gibt es ein handbuch das zu jeder Fehlernummer eine genaue beschreibung hat. Dieses handbuch habe ich in eine TXT kopiert.
hier ein ausschnitt der TXT:
F01000 Softwarefehler intern
Meldungswert: %1
Antriebsobjekt: Alle Objekte
Reaktion: AUS2
Quittierung: POWER ON
Ursache: Ein interner Softwarefehler ist aufgetreten.
Störwert (r0949, hexadezimal interpretieren):
Nur für Siemens-interne Fehlerdiagnose.
Abhilfe: - Störpuffer auswerten (r0945).
- POWER ON bei allen Komponenten durchführen (Aus-/Einschalten).
- Firmware auf neuere Version hochrüsten.
- Hotline kontaktieren.
- Control Unit austauschen.
F01001 FloatingPoint Ausnahme
Meldungswert: %1
Antriebsobjekt: Alle Objekte
Reaktion: AUS2
Quittierung: POWER ON
Ursache: Es ist eine Ausnahme bei einer Operation mit dem Datentyp FloatingPoint aufgetreten.
Der Fehler kann durch das Grundsystem oder eine OA-Applikation (z. B. FBLOCKS, DCC) verursacht werden.
Störwert (r0949, hexadezimal interpretieren):
Nur für Siemens-interne Fehlerdiagnose.
Hinweis:
Weitere Informationen zu dieser Störung können r9999 entnommen werden.
r9999: Störungsnummer.
r9999[1]: Programmzähler in dem Zeitpunkt, als die Ausnahme aufgetreten ist.
r9999[2]: Ursache für die Ausnahme bei FloatingPoint.
Bit 0 = 1: Operation ungültig
Bit 1 = 1: Division durch Null
Bit 2 = 1: Überlauf
Bit 3 = 1: Unterlauf
Bit 4 = 1: Ergebnis ungenau
Abhilfe: - POWER ON bei allen Komponenten durchführen (Aus-/Einschalten).
- Projektierung und Signale der Bausteine bei FBLOCKS prüfen.
- Projektierung und Signale der Pläne bei DCC prüfen.
- Firmware auf neuere Version hochrüsten.
- Hotline kontaktieren.
F01002 Softwarefehler intern
Meldungswert: %1
Antriebsobjekt: Alle Objekte
Reaktion: AUS2
Quittierung: SOFORT
Ursache: Ein interner Softwarefehler ist aufgetreten.
Störwert (r0949, hexadezimal interpretieren):
Nur für Siemens-interne Fehlerdiagnose.
Abhilfe: - POWER ON bei allen Komponenten durchführen (Aus-/Einschalten).
- Firmware auf neuere Version hochrüsten.
- Hotline kontaktieren.
mein Ziel ist es einem Script die Fehlernummer zu übergeben. Das Script soll dann aus der großen TXT Datei die Erklärung zum Fehler ausgeben.
das bedeutet:
würde jetzt "F01000" übergeben werden soll eine TXT erzeugt werden mit dem inhalt:
F01000 Softwarefehler intern
Meldungswert: %1
Antriebsobjekt: Alle Objekte
Reaktion: AUS2
Quittierung: POWER ON
Ursache: Ein interner Softwarefehler ist aufgetreten.
Störwert (r0949, hexadezimal interpretieren):
Nur für Siemens-interne Fehlerdiagnose.
Abhilfe: - Störpuffer auswerten (r0945).
- POWER ON bei allen Komponenten durchführen (Aus-/Einschalten).
- Firmware auf neuere Version hochrüsten.
- Hotline kontaktieren.
- Control Unit austauschen.
sozusagen muss der bereich zwischen F01000 und F01001 in eine neue TXT geschrieben werden.
Ich habe auch schon ein programmbeispiel gefunden das genau das kann:
Führe ich dieses Script in EXCEL aus macht es aber schonmal genau das was ich will.
Sub import()
Dim Zeile As String
Dim start As String
Dim ende As String
Dim ausgabe As String
Dim i As Long
start = "F01000"
ende = "F01001"
Open "C:\Users\Florian\Desktop\vbstest\Fehlerliste_neu.txt" For Input As #1
Open "C:\Users\Florian\Desktop\vbstest\output.txt" For Output As #2
i = 0
While Not EOF(1)
Line Input #1, strZeile
If i Then
Print #2, strZeile
End If
If InStr(strZeile, start) Then
Print #2, strZeile
i = 1
End If
If InStr(strZeile, ende) Then
i = 0
End If
Wend
Close #1
Close #2
End Sub
leider ist das aber kein VB-Script und somit für mich unbrauchbar.
Villeicht ist ja jemand da draußen der mir einen Tipp geben kann das das Programm in ein VB-Script umschreiben kann.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 647689
Url: https://administrator.de/contentid/647689
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
11 Kommentare
Neuester Kommentar
Mit Regex noch effizienter
Aufrufen dann mit Nummer als Parameter
' Eingabedatei
Const FILEIN = "D:\florianhe\test.txt"
' Ausgabedatei
Const FILEOUT = "D:\florianhe\result.txt"
' Objekte erstellen
Set regex = CreateObject("vbscript.regexp")
Set fso = CreateObject("Scripting.FileSystemObject")
' Regex Optionen festlegen
regex.Global = False: regex.IgnoreCase = True: regex.MultiLine = True
' Regex Pattern zum extrahieren des gewünschten Fehlers festlegen
regex.Pattern = "^(" & wscript.Arguments(0) & "\s+[\s\S]+?)^\s+$"
' Inhalt der Eingabedatei in Variable einlesen
inhalt = fso.OpenTextFile(FILEIN,1).ReadAll()
' regex auf Inhalt der Eingabedatei ausführen
set matches = regex.Execute(inhalt)
' wenn die Fehlernummer gefunden wurde dann ...
If matches.count > 0 Then
' schreibe den extrahierten Inhalt in die Auagabedatei
fso.OpenTextFile(FILEOUT,2,True).Write matches(0).submatches(0)
End If
script.vbs "F01001"
Zitat von @FlorianHe:
Wie müsste das Script von jokari aussehen wenn ich die Nummer in einer variable habe und nicht als Parameter?
Wäre es eventuell möglich das Script zu kommentieren? Das würde mir sehr helfen den Inhalt zu verstehen.
Wenn du das unbedingt willst, Zeile 6 das wscript.arguments(0) durch deine Variable ersetzen. Dieser Ausdruck bedeutet, füge den Inhalt des ersten an das Script übergebenen Parameter ein, und das ist die Fehlernummer. Du bräuchtest also deiner Anwendung nur den Pfad zum Skript und dahinter als Parameter die Fehlernummer übergeben, zusätzliche Variable überflüssig!Wie müsste das Script von jokari aussehen wenn ich die Nummer in einer variable habe und nicht als Parameter?
Wäre es eventuell möglich das Script zu kommentieren? Das würde mir sehr helfen den Inhalt zu verstehen.
Was die Regulären Ausdrücke bedeuten kannst du hier nachlesen, das erklär ich jetzt nicht auch noch
https://danielfett.de/2006/03/20/regulaere-ausdruecke-tutorial/
Kommentare s. oben.
Na und, ist doch kein Problem, schreibst du einfach In Zeile 6 den Pattern passend wenn du den führenden Buchstaben nicht vorhersagen kannst hast, dafür ist Regex ja da 😁...
Regex.Pattern = "^([a-z]" & DeineVariable & "\s+[\s\S]+?)^\s+$"
Was auf der Plattform supported wird steht hier
https://support.industry.siemens.com/cs/document/59885894/which-vbs-info ...
Ich bin raus.
https://support.industry.siemens.com/cs/document/59885894/which-vbs-info ...
Ich bin raus.
Das RegExp-Problem scheint eine Krankheit der WEC2013-basierten Panels (Comfort V2/PRO und Mobile) zu sein.
Mit srellcom steht als Ersatz für die VBScript-eigene RegExp-Implementierung die Objektklasse SRELL.RegExp zur Verfügung.
Beispiel:
Mit srellcom steht als Ersatz für die VBScript-eigene RegExp-Implementierung die Objektklasse SRELL.RegExp zur Verfügung.
Beispiel:
Dim re
Set re = CreateObject("SRELL.RegExp")
re.Pattern = "\p{Script=Greek}"
wscript.Echo "It is " & re.Test(ChrW(960)) & " that " & ChrW(960) & " is a Greek letter."