Hallo,
Hi,
Ich habe Logfiles, die ich auswerten will. Sie sind so aufgebaut:
[Sep 26 2002, 16:42:23]
Eventbeschreibung
[Sep 26 2002, 16:44:28]
verhältnismäßig untypisch für Logfiles, aber naja
Ich habe eine Lösung, um [Sep 26 2002, 16:42:23] auszuwerten, so:
if (/[(\S+) (\S+) (\S+), (\S+)]/) {
print "$1 $2 $3 $4\n";
}
Naja, finde ich nicht sonderlich brilliant ;)
Allerdings habe ich keine Ahnung, wie das mit der Eventbeschreibung läuft, also wie ich die auslesen kann. Das ist einfach Text mit allen möglichen Zeichen, der sich über mehrere Zeilen erstreckt. Bis jetzt erkenne ich nur was in [...] steht, weil das ja auch ein konstantes Muster ist.
Schlussendlich wird für jeden Monat des Jahres eine Datei generiert, in der alle Event-Daten und eben die Eventbeschreibung drinstehen (s. oben).
Im Grunde kannst du die gesamte Datei in einen Skalar einlesen:
my $content = do { local $/; <$filehandle> };
und dann alles so auswerten:
while( $content =~ m{
[
( \w+ ) #month
\s+
( \d{2} ) #day
\s+
( \d{4} ) #year
,\s+
( \d{2} : \d{2} : \d{2} ) #time
]
( #capture event-description
(?:
[^\n] #no newline
| \n (?! [ ) #or newline NOT followed by [
)+
)
}x ){
print "Am $2ten $1 im Jahre $3, um $4 Uhr, passierte: $5\n";
}
HTH