so ...
das Perl-Skript steht jetzt.
Es funktioniert auch alles, so wie ich das wollte. Bis auf eine Sache ...
Es grast zunächst die Logdatei (Common Log Format wie gesagt) ab und fischt aus jeder Zeile die Datumsangabe heraus.
Im folgenden Format: z.B.
29/Sep/2008
04/Okt/2008
06/Nov/2008 etc. pp.
und legt diese in einem Hash (%tage) mit diesen Datumsangaben als Keys ab. Die Fächer werden mittels Schleife und Zählvariable mit Nummern (beginnend mit 1 gefüllt.
sieht dann etwa so aus:
%days = (
26/Sep/2008 => '1',
27/Okt/2008 => '2',
28/Nov/2008 => '3',
);
Die Nr.-Angaben werden für eine spätere Benutzerauswahl des Datums genutzt (dafür wird parallel eine Array mit allen Datumsangeben gefüllt, ins erst Fach kommt eine 0, sodass die Datumseinträge mit den gleichen Nummern (Fachnummern 1,2,3 und soweiter entsprechend den Inhalten der Hashfächer)angewählt werden können)
Die sortierte Ausgabe erfolgt dann so:
for my $datum (sort keys %days){
print "$datum\t($tage{$datum})\n";
}
print "\nWelches Datum auswerten? (Nr. eingeben): ";
Dies klappt wunderbar, solange es Datumseinträge eines Monats sind - dann sieht die Ausgabe z.B. so aus:
05/Oct/2008 (1)
06/Oct/2008 (3)
07/Oct/2008 (4)
Blöd wirds, wenn Einträge mehrerer Monate auftauchen, dann sieht die ausgegebene Liste z.B. so aus:
05/May/2008 (5)
05/Jul/2008 (7)
05/Sep/2008 (9)
05/Oct/2008 (10)
06/Feb/2008 (3)
06/Mar/2008 (4)
06/Jul/2008 (8)
06/Oct/2008 (11)
07/Mar/2008 (12)
07/Apr/2008 (2)
07/Sep/2008 (16)
07/Oct/2008 (12)
08/Dec/2008 (25)
09/Dec/2008 (26)
10/Dec/2008 (27)
Kauderwelsch.
Sprich: es wird zwar sortiert, aber falsch: nur nach den Tageszahlen (erste beide Ziffern)
Ich möchte jedoch, dass sowohl die Reihenfolge der Tage, Monate und eventuell auch der Jahre stimmt.
Ich würde die Datums-Strings zunächst erst einmal mittels Suchmuster (Reg. Ausdruck) in Tag, Monat und Jahr zerhacken. z.B. so:
if ($ueb=~m/^(\d+)\/(\w+)\/(\d+)$/){
$d=$1;
$m=$2;
$y=$3;
}
Aber wie weiter? man müsste ja erstmal eine gültige Monatsreihenfolge Festlegen, oder gibt es da vielleicht schon eine Funktion/ Modul im Perl?
Dann könnte man ja eventuell mit einer solchen Schleife weitersortieren:
for my $m (sort keys %days){
print "$datum\t($tage{$m})\n";
}
print "\nWelches Datum auswerten? (Nr. eingeben): ";
Aber man müsste doch auf jeden Fall mehrere neue Hashes anlegen. Es wird doch auf jeden Fall eine recht komplizierte Datensstruktur, oder?
z.B.
1. alle Tage geordnet den entsprechenden Monaten zuweisen
2. die "gefüllten" Monate sortieren
3. die sortierten Monate den entsprechenden Jahren zuweisen
4. Das ganze ordentlich sortiert und durch den Benutzer anwählbar ausgeben.
Wie würdet Ihr dies am sinnvollsten bewerkstelligen?
Möglich, dass es eine vorgefertigte Perl-Funktion gibt und ich Eulen nach Athen trage.
Interessiert mich sehr!