Regulärer Ausdruck / Suche + Vergleichen
Christian
- perl
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
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.
Moin, moin!
Auf welche(n) Wertebereich(e) möchtest Du denn reagieren?
Norbert
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
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
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
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
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
Moin, moin!
Schneller, ungeprüfter Vorschlag:
open(DAT, "<daten.dat");
while(<DAT>) { $daten.=$_; }
close(DAT);
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
danke
gruß christian