RegEx Problem beim verarbeiten einer Binären Datei

  • Hi AutoIt Gemeinde :D,
    wie der Titel schon sagt hab ich ein kleines Problem mit einem RegEx. Ich will die Verlaufdateien von Windows einlesen aber es wird mir immer nur ein Eintrag ausgegeben.
    Ist sicher nur wieder ein richtig blöder Fehler :rolleyes: :D.
    Am besten lässt sich die Datei mit einem Hex Editor betrachten.

    Spoiler anzeigen
    [autoit]


    $sPath = @ScriptDir & "\index.dat"

    [/autoit] [autoit][/autoit] [autoit]

    $sRegEx = "(?i)(?:\d+:\s%s@((?:http|https)(?:www)*:\/\/.+)\x0)+" ;Hier liegt der Knackpunkt
    ;Wenn der RegEx funzen würde dann sollte man mehr als eine Addresse rausbekommen

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen($sPath, 16)
    $sData = FileRead($hFile)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $aRet = StringRegExp(BinaryToString($sData), StringFormat($sRegEx, @UserName), 3)
    ConsoleWrite(@error & @CRLF)
    _ArrayDisplay($aRet)

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($hFile)

    [/autoit]


    schon mal Danke im Vorraus :)

  • Hi,
    regex durchsucht nur bis zum nul-byte!
    Abhilfe könnte sein, die nul-bytes im String durch chr(255) auszutauschen. Dann greift der regex auch...

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $sPath = @ScriptDir & "\index.dat"

    [/autoit] [autoit][/autoit] [autoit]

    $sRegEx = "(?i)(?:\d+:\s%s@((?:http|https)(?:www)*:\/\/.+)\x0)+" ;Hier liegt der Knackpunkt
    ;Wenn der RegEx funzen würde dann sollte man mehr als eine Addresse rausbekommen

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen($sPath, 16)
    $sData = FileRead($hFile)

    [/autoit] [autoit][/autoit] [autoit]

    $bindata=BinaryToString($sData)
    stringreplace($bindata,chr(0),chr(255));chr(0) in chr(255) umwandeln

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $aRet = StringRegExp($bindata, StringFormat($sRegEx, @UserName), 3)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $bindata = ' & $bindata & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite(@error & @CRLF)
    _ArrayDisplay($aRet)

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($hFile)

    [/autoit]


    btw, in deiner Beispieldatei gibts keine auswertbaren Daten^^

  • Hi Andy,
    hmm leider wird auch nur die eine Seite ausgegeben.

    btw, in deiner Beispieldatei gibts keine auswertbaren Daten^^

    Na klar. Du brauchst nen Hex Editor..dann bis zur hälfte runterscrollen und dann kommen solche einträge autoit.de/wcf/attachment/12607/

    Und genau die will ich rausfiltern. In der Form sind die in der Datei:

    2011021520110216: User@http://www.autoit.de

    2011021520110216 = Datum in der Form 0120100215 und am ende kommen noch nen paar Zahlen ran aber die interressieren nicht ;)
    User = Bentzername (User ist das bei meinem VPC)
    http://www.autoit.de = die Gesuchte URL
    Nach der URL steht ein NULL-Byte

    Und in der Form sind die In der Datei verteilt. Zwischendurch kommt noch irgentein Datenschrott den ich nicht haben will...