Patrick Andrieu: Bitte IMMER mampfen!

Beitrag lesen

Hallo alle!

Oder: newline-Zeichen in Hashkey verhindert das Löschen ;)

Nach einer halben Stunde Kopf gegen die Wand, weil mir das erlebte nicht in den Kopf wollte, wollte ich Euch die Erfahrung nicht vorenthalten:

Aus einem Flatfile mit Zeilen nach dem folgenden Muster, erstelle ich wie folgt einen Hash:

WERT0|WERT1|WERT2|WERT3|WERT4

»WERT4« sind Zahlen, die ich nun nach deren Vorkommenhäufigkeit sortieren  will.

   my %zahl;  
   while(<FILE>) {  
     my @tmp = (split/\|/)[4];  
     for(@tmp) { $zahl{$_}++ }  
   }  
  
   for (sort keys %zahl) { print $_, ": ", $zahl{$_}, "\n" }

ergibt sowas wie:

0: 2
12: 4
13: 3
20: 8
etc...

Nun wollte ich die 0 nicht mit ausgeben lassen. Also, nach der Schleife gleich:

   delete $zahl{0};  
   for (sort keys %zahl) { print $_, ": ", $zahl{$_}, "\n" }

und was sehe ich da?

0: 2
12: 4
13: 3
20: 8
etc...

Baue ich mir den Hash hartkodiert im Skript nach:

   my %test =  ( 0 => 2,  
                12 => 4,  
                13 => 3,  
                20 => 8,  
                etc...);  

dann delete $test{0}; for (sort keys %test) { print $_, ": ", $test{$_}, "\n" }:

12: 4
13: 3
20: 8
etc...

Grmbl... grübel grübel... Dann bekam ich Hunger und dachte sprichwörtlich: »so, jetzt gehe ich erstmals etwas mampfen«. Und dann auf dem Weg zum Kühlschrank.... mampfen? Hm, mampfen??? CHOMP!!!

Und nach dem ich die Newlines gemampft hatte, konnte endlich den Schlüssel "0" gefunden werden ;)

   my %zahl;  
   while(<FILE>) {  
     chomp; # MAMPFEN, IMMER MAMPFEN, IMMER UND IMMER WIEDER!  
     my @tmp = (split/\|/)[4];  
     for(@tmp) { $zahl{$_}++ }  
   }  
   delete $zahl{0};  
   for (sort keys %zahl) { print $_, ": ", $zahl{$_}, "\n" }

12: 4
13: 3
20: 8
etc...

Viele Grüße aus Frankfurt/Main,
Patrick

--
_ - jenseits vom delirium - _

   Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?