Thread 2 Dateien/Tabellen mergen/vergleichen
(2 answers)
Opened by Chibi at 2012-01-07 23:04
Hi,
das Mergen geht am Besten über einen Hash. Untenstehend ein bischen Code dazu: 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 #!/usr/bin/perl use strict; use warnings; use IO::File; use Data::Dumper; # Tabellen auf hash lesen: t1.txt, t2.txt my $tab1 = tabContent('t1.txt'); my $tab2 = tabContent('t2.txt'); # mergen my %result = (%{$tab1}, %{$tab2}); # Keys in {1} kriegen Update von {2] print Dumper \%result; sub tabContent{ my $file = shift; my $fh = IO::File->new; $fh->open($file, "r") or die $!; my $r = {}; # hashref return # erste Zeile mit den Überschriften einlesen my $headline = <$fh>; # weg damit # lese den Rest while(my $line = <$fh>){ my $namedef = Names->new( {0 => 'V1', 1 => 'V2', 2 => 'V3', 3 => 'V4', 4 => 'V5', 5 => 'V6'}, [split /\s+/, $line] ); $r->{$namedef->{V1}} = $namedef; } $fh->close; return $r; } # ein kleines Helferlein 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; # p.e. from 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; } 1; ######################################################################## Last edited: 2012-01-08 12:24:24 +0100 (CET) |