Splitten in ein Array sinnvoll?
andy123
- perl
Hallo,
ich habe eine Datenbank mit Statistikaufrufen die folgendermassen aussehen:
Datum,Seite,Anzahl Aufrufe
---schnipp---
28.03.2002,news/jungeszene/121203,1
28.03.2002,news/jungeszene/bautzen,1
28.03.2002,news/kultur,4
28.03.2002,news/kultur/121968,2
28.03.2002,news/politik/121950,2
28.03.2002,news/sachsen,7
28.03.2002,news/sachsen/121951,1
28.03.2002,news/sachsen/121952,1
28.03.2002,news/sachsen/dresden,15
28.03.2002,news/sachsen/dresden/111170,1
28.03.2002,news/sachsen/dresden/116224,1
28.03.2002,news/sachsen/dresden/121808,3
28.03.2002,eshopping/start/produktansicht/villaclassica_sessel,1
28.03.2002,eshopping/start/uebersicht,14
28.03.2002,event/veranstaltungen,22
28.03.2002,event/veranstaltungen//121773,1
28.03.2002,event/veranstaltungen/ausstellungen,4
28.03.2002,event/veranstaltungen/ausstellungen/120855,1
28.03.2002,event/veranstaltungen/buehne/121591,2
---schnipp---
Jetzt moechte ich in der Auswertung eine Art Baum erstellen.
Die 'Äste' sollen sich immer durch einen Split am "/" ergeben. Bei jeder Ebene moechte ich gern die Summe der Aufrufe sehen.
Ist das mit PERL mit vertretbaren Aufwand machbar und habt ihr evtl. einen Loesungsansatz?
Mir geht es weniger um Kompaktheit des Codes (kann lieber auch aussschweifig sein) als mehr um das 'Wie setze ich an'.
Danke Akku
Hallo,
---schnipp---
28.03.2002,news/jungeszene/121203,1
28.03.2002,news/jungeszene/bautzen,1
[...]
---schnipp---
Jetzt moechte ich in der Auswertung eine Art Baum erstellen.
Die 'Äste' sollen sich immer durch einen Split am "/" ergeben. Bei
jeder Ebene moechte ich gern die Summe der Aufrufe sehen.
Na, wo ist denn das Problem? :-)
Das ist ein relativ einfacher Algorithmus:
my $treevar = {hits => 0,childs => undef};
open DAT,'<file.dat' or die $!;
while(<DAT>) {
# in Stueckchen zerhackeln
my ($datum,$url,$hits) = split /,/;
# Pfad in Stueckchen zerhackeln
my @pieces = split !/!,$url;
# zu jeder Ebene die Hits dazu zaehlen
my $tv = $treevar;
foreach my $piece (@pieces) {
$tv->{childs}->{$piece}->{num} += $hits;
$tv = $tv->{childs}->{$piece};
}
}
close DAT;
gib_aus($treevar,'');
sub gib_aus($$) {
my $tv = shift; # die Baum-Variable
my $path = shift; # Der Pfad
if($path) { # beim ersten Aufruf ist '$path' leer
print "$path: $tv->{num}\n";
}
else {
print "Total: $tv->{num}\n";
}
# Wenn das Element Kind-Elemente hat,
# alle Kind-Elemente durchlaufen und pro Kind-Element eine
# weitere Rekursions-Instanz starten
if(exists $tv->{childs}) {
foreach my $p (keys %{$tv->{childs}}) {
gib_aus($tv->{childs}->{$p},"$path/$p");
}
}
}
Ist allerdings ungetestet. Kann also noch ein paar Schoenheitsfehler
haben.
Gruesse,
CK
Hallo,
---schnipp---
28.03.2002,news/jungeszene/121203,1
28.03.2002,news/jungeszene/bautzen,1
[...]
---schnipp---
Jetzt moechte ich in der Auswertung eine Art Baum erstellen.
Die 'Äste' sollen sich immer durch einen Split am "/" ergeben. Bei
jeder Ebene moechte ich gern die Summe der Aufrufe sehen.
Na, wo ist denn das Problem? :-)
Das ist ein relativ einfacher Algorithmus:
Okay, danke erst mal.
Ich werd mir das mal anschauen.
Bye Andi