Re: Grep Routine ?
Verfasst: 12.03.2017 21:55
Komisch, habe gerade mal den wesentlichen Code außerhalb meiner Applikation getestet und da liefert Regex
bei jedem Aufruf einen Match.
In meinem Code mache ich das genauso, da findet Regex dann aber nach dem ersten Aufruf von GrepText() dann nichts mehr.
Innerhalb von GrepText() habe ich mit Debug geprüft, ob die beiden Strings ( logcontent.s, greptext.s) den korrekten Inhal
haben und dies ist der Fall.Erster Aufruf bringt immer korrektes Ergebnis und bei allen weiteren Aufrufen findet Regex
dann keine Übereinstimmung mehr, obwohl diese gefunden wird, wenn es die erste Suche ist.
Edit:
Ich habs gefunden
Da war - wie immer - ein Denkfehler drin und ich hab dann wohl nicht so genau hingesehen.
Ich lade logcontent.s aus dem EditorGadget, aber das Ergebnis aus GrepText wird dann wieder ins EditorGadget geladen.
Bei erneutem Aufruf ist das Logfile also bereits durch die erste Suche gefiltert und somit kann dann auch nichts mehr
gefunden werden.
__________________________________________________
Quote-Tags>Code-Tags
11.03.2017
RSBasic
bei jedem Aufruf einen Match.
Code: Alles auswählen
Enumeration
#RegularExpression
EndEnumeration
Global Lines
Declare.s GrepText(logcontent.s, greptext.s)
; Logdatei erzeugen
logcontent.s + "Das ist eine Logzeile Test1"+#CRLF$
logcontent.s + "Das ist eine Logzeile Test2"+#CRLF$
logcontent.s + "Das ist eine Logzeile Test3"+#CRLF$
logcontent.s + "Das ist eine Logzeile Test4"+#CRLF$
logcontent.s + "Das ist eine Logzeile Test2 Test4"+#CRLF$
Lines = CountString(logcontent.s, #CRLF$)
; Strings in Logdatei suchen
Debug GrepText(logcontent.s, "Test1")
Debug GrepText(logcontent.s, "Test2")
Debug GrepText(logcontent.s, "Test3")
Debug GrepText(logcontent.s, "Test4")
Procedure.s GrepText(logcontent.s, greptext.s)
; returns all lines in logcontent.s that contain the string in greptext.s
GrepStartTime = ElapsedMilliseconds()
*Buffer = AllocateMemory(7000000)
*Pointer = *Buffer
If CreateRegularExpression(#RegularExpression, ".*"+greptext.s+".*")
If ExamineRegularExpression(#RegularExpression, logcontent.s)
While NextRegularExpressionMatch(#RegularExpression)
CopyMemoryString(RegularExpressionMatchString(#RegularExpression), @*Pointer)
match+1
Wend
EndIf
EndIf
grepline.s = PeekS(*Buffer)
ElapsedTime.d = ElapsedMilliseconds()-GrepStartTime
ElapsedTime.d = ElapsedTime.d/1000
Debug "Grep process took "+ElapsedTime.d+" seconds to find "+match+" Matches in "+lines+" Lines"
FreeRegularExpression(#RegularExpression)
FreeMemory(*Buffer)
ProcedureReturn grepline.s
EndProcedure
Innerhalb von GrepText() habe ich mit Debug geprüft, ob die beiden Strings ( logcontent.s, greptext.s) den korrekten Inhal
haben und dies ist der Fall.Erster Aufruf bringt immer korrektes Ergebnis und bei allen weiteren Aufrufen findet Regex
dann keine Übereinstimmung mehr, obwohl diese gefunden wird, wenn es die erste Suche ist.
Edit:
Ich habs gefunden

Ich lade logcontent.s aus dem EditorGadget, aber das Ergebnis aus GrepText wird dann wieder ins EditorGadget geladen.
Bei erneutem Aufruf ist das Logfile also bereits durch die erste Suche gefiltert und somit kann dann auch nichts mehr
gefunden werden.
__________________________________________________
Quote-Tags>Code-Tags
11.03.2017
RSBasic