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
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;
use strict;
sub new{
my $class = shift;
my $maps = shift;
my $aref = shift;
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);
my $z1 = "Name,Vorname,Alter";
my @header = split ",", $z1;
my $helper = {};
foreach my $i(0..$#header){
$helper->{$i} = $header[$i];
}
my $result = {};
my $i = 1;
while(my $line = <DATA>){
chomp $line;
my $o = Names->new($helper, [split ",", $line]);
$result->{$i} = $o;
$i++;
}
print dump $result;
__END__
Meier,Hans,45
Hansel,Horst,54
Horst,Anna,33
########################################################################
Bitte ignorieren
########################################################################
Quotewie kriege ich es hin, dass der Key "Name" die Values "Meyer" und "Schmidt" zugeweisen bekommt?
mein erster Vorschlag wäre ein Array als Value, bzw. eine Referenz auf das Array:
$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)