Leser: 22
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
my $dateiname = "/bla/bla/bla/steuerdatei.cfg";
my $file = "/bla/bla/bla/fileMitDatensätzen.csv";
open (INP,"<$dateiname");
my @Keys = <INP>; #Steuerdatei
close INP;
open (INPUT,"<$file");
my @Values = <INPUT>; #Datensätze zeilenweise
close INPUT;
chomp(@Keys); chomp(@Values);
my @AoH = ();
my %hash= ();
my $i = 0;
my $j = 0;
my $k = 0;
for (my $i=1; $i<(@Values)-1; $i++){ #Vor- & Schlusssatz abschneiden
#%hash= ();
#print "Zaehler: $i\n";
my @valueX = split(/\|/, $Values[$i]);
#print "$valueX[0] ,,, $valueX[1] ,,, $valueX[2]\n";
#push @AoH, { $Keys[0] => $valueX[0], $Keys[1] => $valueX[1], $Keys[2] => $valueX[2]};
for(@Keys){
$hash{ $Keys[$j++] } = $valueX[$k++];
}
$j= 0; $k = 0;
push @AoH, \%hash;
#$AoH[($i)-1] = \%hash;
}
my $href ="";
my $role="";
#Ausgabe:
for $href ( @AoH ) {
for $role ( keys %$href ) {
print "$role=$href->{$role} ";
}
print "\n";
}
2010-11-18T15:59:53 hansi66Dann herzlich Willkommen in dieser Runde...Hallo zusammen, bin neu im Forum und Frischling im Perl Umfeld....
QuoteNein, das siehst Du richtig.Problem 1) Das klappt leider nicht...weil die Hashes ja nur als Referenzen abgelegt werden...oder sehe ich da was falsch!?
QuoteZu dieser Art, "open" zu benutzen, solltest Du Dir das hier mal anschauen: http://reneeb-perlblog.blogspot.com/2009/09/versch...Code: (dl )1
2
3
4
5
6my $dateiname = "/bla/bla/bla/steuerdatei.cfg";
my $file = "/bla/bla/bla/fileMitDatensätzen.csv";
open (INP,"<$dateiname");
my @Keys = <INP>; #Steuerdatei
close INP;
QuoteCode (perl): (dl )1 2 3 4 5my %hash= (); my $i = 0; my $j = 0; my $k = 0; for (my $i=1; $i<(@Values)-1; $i++){ #Vor- & Schlusssatz abschneiden
for ( 1 .. $#Values ) {
QuoteCode (perl): (dl )1 2 3 4 5 6 7for(@Keys){ $hash{ $Keys[$j++] } = $valueX[$k++]; } $j= 0; $k = 0; push @AoH, \%hash; #$AoH[($i)-1] = \%hash; }
1 2 3 4 5 6 7 8 9 10 11
for my $i ( 1 .. $#Values ){ #Vor- & Schlusssatz abschneiden my %hash; my @valueX = split(/\|/, $Values[$i]); for my $j ( 0 .. $#Keys){ $hash{ $Keys[$j] } = $valueX[$j]; } push @AoH, \%hash; }
2010-11-18T16:22:42 reneeSolche Schleifenköpfe schreibt man in Perl eher so:
Code (perl): (dl )for ( 1 .. $#Values ) {
Dann erkennt man gleich, dass es um eine Zahlenreihe geht. Mit $#Arrayname bekommst Du den Index des letzten Elements.
1
2
3
4
5
6
7
8
test1|test2|test3
test4|test5|test6
test7|test8|test9
testA|testB|testC
testD|testE|testF
testG|testH|testI
testJ|testK|testL
testM|testN|testO
Key1,Key2,Key3
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
#!/user/bin/perl use strict; use warnings; # Modul zu lesen von CSV-Artigen Strukturen use Text::CSV; # Modul zur Ausgabe von Datenstrukturen use Data::Dumper; my $keys_file='keys.cfg'; my @val_files=qw(values1.csv values2.csv values3.csv); my $keys_in=Text::CSV->new({sep_char=>','}); open(my $fh, "<", $keys_file) or die("Error open $keys_file ($!)\n"); my $keys = $keys_in->getline($fh); close($fh); my $vals_in=Text::CSV->new({sep_char=>'|'}); my @values; for my $file (@val_files) { my @lines; open(my $fh, "<", $file) or die("Error open $file ($!)\n"); while(my $vals = $vals_in->getline($fh)) { my %line_data; for my $pos (0..$#$vals) { $line_data{$keys->[$pos]}=$vals->[$pos]; } push(@lines,\%line_data); } close($fh); push(@values,\@lines); } # Testausgabe: print Dumper(\@values);