StringRegExp - ich schaff es nicht

  • hallöchen in die runde,

    ich habe hier einen string $text, den ich in ein array "zerlegen" muss, und dann in eine log-datei schreiben soll. ich dachte, dass dies am besten mit regexp zu lösen ist. leider jedoch komme ich mit regexp nur sehr schwer klar, da ich es noch nie benötigt habe (mein liebling war bisher immer _stringbetween). in $text ist im übrigen weitaus mehr enthalten als im code angegeben. das $text-beispiel sollte aber alle erdenklichen möglichkeiten bereits enthalten.

    im folgenden code bin ich nur bis zu einer gewissen stelle gekommen. vielleicht lässt sich mein "problemchen" hier lösen ? details/kurzerkärungen sind auch im code enthalten.

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <array.au3>

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

    $text="13.06.200712:31:11xyzblank761512.06.200711:47:16S-Lblank7605textText11.06.200711:46:02S-Lblank760010.06.200720:25:15---0000text08.06.200709:14:33PText06.06.200709:18:58C7616s-L7610"
    ; die quelle $text ist der ist-zustand, also kein anderer input vorhanden
    ; Ergebniss in Array wie folgt:
    ; 13.06.200712:31:11xyzblank7615
    ; 12.06.200711:47:16S-Lblank7605textText
    ; 11.06.200711:46:02S-Lblank7600
    ; 10.06.200720:25:15---0000text
    ; 08.06.200709:14:33PText
    ; 06.06.200709:18:58C7616s-L7610
    ; die begrenzung liegt also immer auf das nächstfolgende datum

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

    $array=StringRegExp($text, '(\d{2}[.]\d{2}[.]\d{4}\d{2}[:]\d{2}[:]\d{2}\D{1,}\d{4})',3) ;; unvollständig; weiter komme ich nicht, auch wegen der or-möglichkeit
    _ArrayDisplay($array,"")
    ; hier dann das array in ein log-file schreiben --> jedoch kein problem mit _FileWriteFromArray

    [/autoit]

    bin gespannt auf die lösung; vielen dank im voraus.

    gruss exberliner

  • hi

    vieleicht ist stringsplitt besser für dich geeignet =)

    müste dann halt ne relativ lange if abfrage werden aber ich glaub so müsste es auch gehn...

    $ergebnis stringregexp($text,"..\...\.....(.*)..\.",1)

    das müsste theoretisch alles zwischen datum und nächstem datum angeben dan must du halt noch iwie das datum rausfinden(versuch ich nacher mal...) oder am besten bernd fragen :musik1:

    //edit: iwie bekomm ichs aucxh nicht hin :(

    mfg

    Einmal editiert, zuletzt von derda (13. Juni 2007 um 17:03)

    • Offizieller Beitrag

    Hi,

    hilft dir dies?

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <array.au3>

    $text="13.06.200712:31:11xyzblank761512.06.200711:47:16S-Lblank7605textText11.06.200711:46:02S-Lblank760010.06.200720:25:15---0000text08.06.200709:14:33PText06.06.200709:18:58C7616s-L7610"
    ; die quelle $text ist der ist-zustand, also kein anderer input vorhanden
    ; Ergebniss in Array wie folgt:
    ; 13.06.200712:31:11xyzblank7615
    ; 12.06.200711:47:16S-Lblank7605textText
    ; 11.06.200711:46:02S-Lblank7600
    ; 10.06.200720:25:15---0000text
    ; 08.06.200709:14:33PText
    ; 06.06.200709:18:58C7616s-L7610
    ; die begrenzung liegt also immer auf das nächstfolgende datum

    $array=StringRegExp($text, '(\d{2}\.\d{2}\.\d{4}\d{2}:\d{2}:\d{2}.*?)(?=\d{2}\.)|(\d{2}\.\d{2}\.\d{4}\d{2}:\d{2}:\d{2}.*)',3) ;; unvollständig; weiter komme ich nicht, auch wegen der or-möglichkeit
    _ArrayDisplay($array,"")
    ; hier dann das array in ein log-file schreiben --> jedoch kein problem mit _FileWriteFromArray

    [/autoit]

    So long,

    Mega

  • @th.meger

    jau, das ist super .. aber da scheint noch irgendwo ein fehler zu sein.
    da ich die syntax nicht so recht verstehe, krieg ich auch nicht raus, wo der fehler liegt. das problem ist folgendes:
    es werden alle 6 im array abgelegt; aber 7 angelegt, wobei array[5] leer bleibt. dürfte ich dich (th.meger) nochmal kurz um deine hilfe bitten ?

    danke und gruss exberliner

    • Offizieller Beitrag

    Hallo,

    ich habs mal angepasst!

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <array.au3>

    $text="13.06.200712:31:11xyzblank761512.06.200711:47:16S-Lblank7605textText11.06.200711:46:02S-Lblank760010.06.200720:25:15---0000text08.06.200709:14:33PText06.06.200709:18:58C7616s-L7610"
    ; die quelle $text ist der ist-zustand, also kein anderer input vorhanden
    ; Ergebniss in Array wie folgt:
    ; 13.06.200712:31:11xyzblank7615
    ; 12.06.200711:47:16S-Lblank7605textText
    ; 11.06.200711:46:02S-Lblank7600
    ; 10.06.200720:25:15---0000text
    ; 08.06.200709:14:33PText
    ; 06.06.200709:18:58C7616s-L7610
    ; die begrenzung liegt also immer auf das nächstfolgende datum

    $array=StringRegExp($text, '(\d{2}\.\d{2}\.\d{4}\d{2}:\d{2}:\d{2}.*?)(?=\d{2}\..*)|.*\S',3) ;; unvollständig; weiter komme ich nicht, auch wegen der or-möglichkeit
    _ArrayDisplay($array,"")
    ; hier dann das array in ein log-file schreiben --> jedoch kein problem mit _FileWriteFromArray

    [/autoit]
  • Bernd

    sauber und supi. problem gelöst und ich mach auf wackeldackelkopf.
    jetzt werde ich mich ranmachen und das anhand der beschreibung in wiki und so noch verstehen lernen.

    vielen dank an euch beide th.meger und bernd.

    gruss exberliner

    Einmal editiert, zuletzt von ExBerliner (13. Juni 2007 um 18:34)