Thread CSV Datei als Hash aufbauen
(4 answers)
Opened by PETER_PAN2009 at 2011-04-19 16:58
Edit:
Sorry, vorhin war ich nicht ganz bei der Sache... also Du brauchst einen Helper, der aus der ersten Zeile heraus, die Zuordnung macht. Zum Testen habe ich die erste Zeile mal von Hand rausgenommen und den Helper erstellt. Die CSV ohne erste Zeile als DATA. Siehe Code Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 package Names; ########################################################################### # Rolf Rost, 14.2.2011 # Anonyme Array-Elemente bekommen Namen ########################################################################### use strict; # Setzt ein Array in ein Objekt um sub new{ my $class = shift; my $maps = shift; # {3 => 'Day', 4 => 'Month', 5 => 'Year'} my $aref = shift; # array als referenz von localtime, stat, etc. return if ref $maps ne 'HASH'; return if ref $aref ne 'ARRAY'; my $self = {}; for(my $i = 0; $i < scalar(@$aref); $i++){ $self->{$maps->{$i}} = $aref->[$i] if exists $maps->{$i}; } return bless $self, $class; } package main; use strict; use warnings; use Data::Dump qw(dump); # Erste Zeile sei my $z1 = "Name,Vorname,Alter"; my @header = split ",", $z1; my $helper = {}; foreach my $i(0..$#header){ $helper->{$i} = $header[$i]; } #print dump $helper; # { "0" => "Name", 1 => "Vorname", 2 => "Alter" } my $result = {}; my $i = 1; # Zeilennummer while(my $line = <DATA>){ chomp $line; my $o = Names->new($helper, [split ",", $line]); $result->{$i} = $o; $i++; } print dump $result; #{ # 1 => bless({ Alter => 45, Name => "Meier", Vorname => "Hans" }, "Names"), # 2 => bless({ Alter => 54, Name => "Hansel", Vorname => "Horst" }, "Names"), # 3 => bless({ Alter => 33, Name => "Horst", Vorname => "Anna" }, "Names"), #} # CSV __END__ Meier,Hans,45 Hansel,Horst,54 Horst,Anna,33 ######################################################################## Bitte ignorieren ######################################################################## Quote mein erster Vorschlag wäre ein Array als Value, bzw. eine Referenz auf das Array: Code (perl): (dl
)
$hash{Name} = ['Vorname','Alter']; Rosti Edit: Mein zweiter Vorschlag hängt davon ab, wie Dir mein Erster gefällt ;) Last edited: 2011-04-19 20:06:26 +0200 (CEST) |