andy123: Splitten in ein Array sinnvoll?

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

  1. 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:

    Variable, um den Baum zu speichern

    my $treevar = {hits => 0,childs => undef};

    file oeffnen

    open DAT,'<file.dat' or die $!;

    Zeilenweise einlesen

    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;

    Ausgabe

    gib_aus($treevar,'');

    Rekursive Funktion (wir haben eine rekursive Daten-Struktur)

    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

    1. 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