Christian: Regulärer Ausdruck / Suche + Vergleichen

Hallo,

ich habe ein File, welches ich mit einem LogAgent überwache. Dieser kann mit REGEX umgehen.
Im File steht folgendes:

XY-WERT - Info
      Wert=125
      blabla

Ich möchte jetzt nach XY-WERT suchen und dann den Wert in der nächsten Zeile (Tab davor) prüfen, ob er in einem bestimmten Wertebereich liegt.

Für Hilfe wäre ich dankbar.
Grüße Christian

  1. Hi,

    Ich möchte jetzt nach XY-WERT suchen und dann den Wert in der nächsten Zeile (Tab davor) prüfen, ob er in einem bestimmten Wertebereich liegt.

    Du kannst den Wert mittels einer Regular Expression ermitteln. Die Prüfung kann _nicht_[1] mit dieser erfolgen - ein Wertebereich ist kein Muster.

    Cheatah

    [1] Bzw. nur mit erheblichem Individualaufwand, der i.d.R. weder wartbar noch performant ist.

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Moin, moin!

    Auf welche(n) Wertebereich(e) möchtest Du denn reagieren?

    Norbert

    1. Ich bräuchte einen regulären Ausdruck der prüft, ob der Zahlenwert zwischen 100 und 200 liegt.

      Gruß Christian

      Moin, moin!

      Auf welche(n) Wertebereich(e) möchtest Du denn reagieren?

      Norbert

      1. Huhu Christian

        Ich bräuchte einen regulären Ausdruck der prüft, ob der Zahlenwert zwischen 100 und 200 liegt.

        Na das ist doch einfach:

        Falls 100 und 200 zum Wertebereich dazugehören sollen
        eine 1 gefolgt von zwei beliebigen Zahlen oder eben 200.

        (1/d/d|200)

        Wenn nicht wird es ein bischen kniffliger

        (10[1-9]|1[1-9]\d)

        bzw. besser das häufiger erwartete Teilpattern zuerst auflisten

        (1[1-9]\d|10[1-9])

        Wobei ich den Eindruck habe, dass Du Deine eigentliche Aufgabenstellung soweit ich das aus Deinen Postings erahnen kann etwas umständlich angehst.
        Vielleicht verrätst Du uns mal was Du eigentlich machen musst/möchtest.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Huhu

          Na das ist doch einfach:

          Von wegen, nichts ist so einfach als das man es nicht auch verkehrt machen könnte.

          (1/d/d|200)

          (1\d\d|200)

          Viele Grüße

          lulu

          --
          bythewaythewebsuxgoofflineandenjoytheday
        2. Hola lulu,

          also ich habe ein LogFile in das Infos über Cachefüllstände geschrieben werden. Diese Will/soll ich mit einem LogAgent überwachen. In diesem LogAgent habe ich die Möglichkeit positive und negative Patterns einzugeben. Diese werden auch in Form von Regex verstanden.
          Ich muss also den Cachenamen finden und anschließend den Zahlenwert in der nächsten Zeile überprüfen. Da ist dann auch der Haken. Dem Ding zu verklickern in der nächsten Zeile nach dem  Tab und dem = den Wert zu prüfen.

          Viele Grüße Christian

          1. Huhu Christian

            also ich habe ein LogFile in das Infos über Cachefüllstände geschrieben werden. Diese Will/soll ich mit einem LogAgent überwachen. In diesem LogAgent habe ich die Möglichkeit positive und negative Patterns einzugeben. Diese werden auch in Form von Regex verstanden.
            Ich muss also den Cachenamen finden und anschließend den Zahlenwert in der nächsten Zeile überprüfen. Da ist dann auch der Haken. Dem Ding zu verklickern in der nächsten Zeile nach dem  Tab und dem = den Wert zu prüfen.

            Das verstehe ich jetzt so das

            1. das LogFile-Format fest vorgegeben ist

            2. das Auswertungsprogramm (LogAgent) fest vorgegeben ist.

            3. Du den LogAgenten mit RegExp "füttern" kannst die bei "match" bzw. "no match" eine vorgegeben Meldung ausgeben.

            Also etwa so

            RegExp1 => Der Wert des Cache XYZ hat den Schwellwert überschritten

            RegExp2 => Alles ok

            RegExp3 => ungültiges LogFileFormat

            etc.

            Demnach bist Du also ausschliesslich auf die RegExp angewiesen ohne zusätzlich eigene Programmlogik.

            Schau Dir das Posting von Norbert an, das dürfte der Lösung
            schon recht nahe kommen.

            Viele Grüße

            lulu

            --
            bythewaythewebsuxgoofflineandenjoytheday
      2. Moin, moin!

        Schneller, ungeprüfter Vorschlag:

        Datei in Variable einlesen

        open(DAT, "<daten.dat");
        while(<DAT>) { $daten.=$_; }
        close(DAT);

        Wenn eine Zeile mit "XY-WERT" beginnt

        und in der folgenden Zeile nach einem Tab-Sprung "Wert=",

        eine "1" und genau zwei weitere Ziffern kommen...

        if($daten=~/\nXY-WERT.*?\n\tWert=1\d{2}\D/)
        {
          print "100 <= XY-Wert < 200\n";
        }

        Nicht berücksichtigt ist beispielsweise der Sonderfall, das XY-WERT in der ersten Zeile der Datei steht. Und so einfach geht es nur, wenn beim Wert 100 eine Reaktion erfolgen soll, bei 200 jedoch nicht. Und führende Nullen etc. würden zu Problemen führen.

        Alles klar?

        Norbert

  3. danke

    gruß christian