chris.m 10 Geschrieben 10. Januar 2008 Melden Teilen Geschrieben 10. Januar 2008 Hallo zusammen, habe ein nettes anliegen wo ihr mir vielleicht helfen könnt. Bin nicht so erfahren was das scripten mit batch oder vbs betrifft. Habe einen Logfile den ich gerne nach bestimmten sachen auslesen lassen möchte. mit batch geht es via Findstr. Aber er soll mir nicht nur die zeile ausspucken wo das wort z.b "broken_cable" auftaucht sondern auch die nächst mögliche Zeile wo Plan_2345 drin steht. Es geht sich darum das er in dem Logfile in eine Zeile einen fehler namens broken_conduit schreibt und in der nächst möglichen zeile steht die alternative drin wo der Fehler entstanden ist. [09.01.2008 22:33:14] [info] [pta_merge_alternatives.pta_merge_alternatives:int!merge_view()] Datenbank gis - Alternative "|Engineering Design|PLAN_42380" - Projekt/Planung "521197 - Ausbau EFH Adenberg, Rafz": Merge durchgeführt. 1199914394:306 design_clerk using_alternative: {dc!21988} [09.01.2008 22:33:31] [info] [pta_merge_alternatives.pta_merge_alternatives:int!merge_view()] Datenbank gis - Alternative "|Engineering Design|PLAN_42385" - Projekt/Planung "NVM_520829 - Bergdietikon, Waldeggstr. 6, Nb. EFH": Merge durchgeführt. 1199914411:196 design_clerk using_alternative: {dc!21990} **** Warnung: Nach dem Änderungsaustausch hat das System den folgenden Datenfehler erkannt: Unterbrochener Trassenverlauf des Rohres. Korrigieren Sie bitte das Rohr. mit!mit_manager!post_merge_error_detected(error_type=:broken_conduit, error_description="Unterbrochener Trassenverlauf des Rohres.", cleanup_description="Korrigieren Sie bitte das Rohr.") **** Warnung: Nach dem Änderungsaustausch hat das System den folgenden Datenfehler erkannt: Unterbrochener Trassenverlauf des Kabelstücks. Korrigieren Sie bitte das Kabelstück. mit!mit_manager!post_merge_error_detected(error_type=:broken_cable, error_description="Unterbrochener Trassenverlauf des Kabelstücks.", cleanup_description="Korrigieren Sie bitte das Kabelstück.") [09.01.2008 22:33:45] [info] [pta_merge_alternatives.pta_merge_alternatives:int!merge_view()] Datenbank gis - Alternative "|Engineering Design|PLAN_42392" - Projekt/Planung "NVM_521007 - Engstringerstr. 29, Abb. mit Wiederaufbau": Merge durchgeführt. 1199914425:337 design_clerk using_alternative: {dc!21994} [09.01.2008 22:33:51] [info] [pta_merge_alternatives.pta_merge_alternatives:int!merge_view()] Datenbank gis - Alternative "|Engineering Design|PLAN_42420" - Projekt/Planung "NVM_519547 - Bennwil,Eichholzstr.1+4,Abbr.F": Merge durchgeführt. 1199914431:306 design_clerk using_alternative: {dc!21996} in diesem ausschnitt könnt ihr sehen was ich meine. Er schreibt da ja was von broken_cable und als nächste kommt dann die PLAN_42392 Da ich dieses beispiel schonmal hier habe muss es auch für den Fehler klappen der nicht die PLAN_..... direkt drunter stehen hat. wie hier "broken_conduit" da kommt der andere Fehler noch drunter das script sollte dann in logile so aussehen: mit!mit_manager!post_merge_error_detected(error_type=:broken_conduit, error_description="Unterbrochener Trassenverlauf des Rohres.", cleanup_description="Korrigieren Sie bitte das Rohr.") [09.01.2008 22:33:51] [info] [pta_merge_alternatives.pta_merge_alternatives:int!merge_view()] Datenbank gis - Alternative "|Engineering Design|PLAN_42420" - Projekt/Planung "NVM_519547 - Bennwil,Eichholzstr.1+4,Abbr.F": Merge durchgeführt. Wäre super wenn einer von euch vielleicht eine Lösung via batch oder vbs hätte. Werde noch weiter versuchen es selber hinzubekommen Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 10. Januar 2008 Melden Teilen Geschrieben 10. Januar 2008 Hallo, Bin nicht so erfahren was das scripten mit batch oder vbs betrifft da hast du eine schöne Aufgabe, um hineinzukommen Ich kann dir gerne das m.E. notwendige Werkzeug in vbs dazu geben: Microsoft Windows 2000 Scripting Guide - Searching for Text in a String Microsoft Windows 2000 Scripting Guide - Making Decisions Microsoft Windows 2000 Scripting Guide - Reading and Writing Text Files Microsoft Windows 2000 Scripting Guide - Arrays -du liest das Logfile zeilenweise in ein Array ein -du suchst im Text ob in einer Zeile ein Treffer vorkommt. Falls ja, gibst du das Arrayelement dieser Zeile + das nächste Arrayelement in die Ausgabe Eine fertige Lösung habe ich keine parat cu blub Zitieren Link zu diesem Kommentar
chris.m 10 Geschrieben 12. Januar 2008 Autor Melden Teilen Geschrieben 12. Januar 2008 Hallo Blub, also habe soweit jetzt alles geschafft was ich wolte. Jetzt habe ich nur ein Problem. Wenn er nach dem Fehler sucht findet er in auch und schreibt diesen in eine text datei. Wenn er den fehler gefunden hat sucht er anschliessend nach einem bestimmten string "Engenee..." aber diesen schreibt er nicht einmal sondern 2 mal in die datei. Weiß aber leider nicht warum. hast du eine Idee wieso. Habe das script und den logfile mal angehangen. hier auch mal da script Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 myName = WScript.ScriptFullName myPath = Left(myName, InStrRev(myName, "\")) strLogFile = mypath & "\" & "fo.txt" 'mypath Function RegExpTest(patrn, strng) RegExpTest = False Dim regEx, Match, Matches ' Create variable. Set regEx = New RegExp ' Create a regular expression. regEx.Pattern = patrn ' Set pattern. regEx.IgnoreCase = True ' Set case insensitivity. regEx.Global = True ' Set global applicability. Set Matches = regEx.Execute(strng) ' Execute search. For Each Match in Matches ' Iterate Matches collection. Wscript.Echo strng Call WriteToLog(strLogFile, strng) RegExpTest = True Next End Function Sub WriteToLog(inFile, inText) Set objFile1 = objFSO.OpenTextFile(inFile, 8, True) objFile1.WriteLine(inText) objFile1.Close End Sub Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(mypath & "\" & "session.txt", 1) Do Until objFile.AtEndOfStream strLine = objFile.ReadLine patrn = "broken_conduit" If RegExpTest (patrn, strLine) Then Do Until RegExpTest ("Engineering Design|PLAN_", strLine) strLine = objFile.ReadLine Loop End If Loop objFile.Close 'generadet by Chris.M an Vladi. P. test.vbs.txt objekte.txt Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 12. Januar 2008 Melden Teilen Geschrieben 12. Januar 2008 Hallo Chris, Ich habe jetzt nur die Symptome bereinigt, indem ich eine Boolvariable bprint eingeführt habe. bprint=0 For Each Match in Matches ' Iterate Matches collection. if bprint=0 then Wscript.Echo strng , boprint Call WriteToLog(strLogFile, strng) bprint=1 end if RegExpTest = True Next Irgendwie baut er den String in der Variablen matches 2*mal zusammen. cu blub Zitieren Link zu diesem Kommentar
chris.m 10 Geschrieben 14. Januar 2008 Autor Melden Teilen Geschrieben 14. Januar 2008 Hi Blub, habe es jetzt mal so eingefügt und muss sagen es funktioniert wunderbar. habe aber jetzt ein anderes Problem. Wie beim anfang beschrieben muss ich ihn nach mehreren Fehlern suchen lassen. Das mit dem Arry krieg ich irgendwie nicht hin. habe es auch mal im string "patrn" versucht mit oder also "|" aber irgendwie spuckt er mir nur eins aus (Beisp. patrn = "broken_cable|broken_conduit") Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 myName = WScript.ScriptFullName myPath = Left(myName, InStrRev(myName, "\")) strLogFile = mypath & "\" & "fehlerobjekte.txt" 'mypath Function RegExpTest(patrn, strng) RegExpTest = False Dim regEx, Match, Matches ' Create variable. Set regEx = New RegExp ' Create a regular expression. regEx.Pattern = patrn ' Set pattern. regEx.IgnoreCase = True ' Set case insensitivity. regEx.Global = True ' Set global applicability. Set Matches = regEx.Execute(strng) ' Execute search. bprint=0 For Each Match in Matches ' Iterate Matches collection. if bprint=0 then Wscript.Echo strng , boprint Call WriteToLog(strLogFile, strng) bprint=1 end if RegExpTest = True Next End Function Sub WriteToLog(inFile, inText) Set objFile1 = objFSO.OpenTextFile(inFile, 8, True) objFile1.WriteLine(inText) objFile1.Close End Sub Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(mypath & "\" & "session.txt", 1) Do Until objFile.AtEndOfStream strLine = objFile.ReadLine patrn = "broken_cable" If RegExpTest (patrn, strLine) Then Do Until RegExpTest ("Engineering Design|PLAN_", strLine) strLine = objFile.ReadLine Loop End If Loop objFile.Close weißt du vielleicht wie ich das am besten mache das er nach mehreren sucht broken_cable ; broken_conduit und noch weitere. Gruss und Dank Chris Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 14. Januar 2008 Melden Teilen Geschrieben 14. Januar 2008 hi, mit der Powershell gehts dann doch schneller: folgende Datei als *.ps1 abspeichern ----------- $a=get-content .\fehlerobjekte.txt for ($i = 0; $i -le ($a.length - 1); $i ++) { if ($a[$i] -match "broken_cable|Plan_123"){ $a[$i] $a[$i+1] $i=$i+1 } } ----------- Running Windows PowerShell Scripts in der Powershell in das ps1-Verzeichnis wechseln und mit .\<scriptname>.ps1 aufrufen wenn du mehr Hilfe für die Suchkriterien brauchst, gib einfach get-help about_regular_expression in der ps-Konsole ein cu blub Zitieren Link zu diesem Kommentar
chris.m 10 Geschrieben 14. Februar 2008 Autor Melden Teilen Geschrieben 14. Februar 2008 Thread kann geschlossen werden Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.