Thread Gesetze vergleichen
(3 answers)
Opened by andy at 2013-06-04 15:37
Müssen die Einträge wirklich UNTER denjenigen stehen, die durch Datei2 "überschrieben" wurden?
Wenn nicht, kann man das recht einfach lösen:
Damit landen alle Einträge aus beiden Dateien im Ergebnis-Hash; die Einträge des zweiten Hashes, die das gleiche Kürzel haben wie die aus dem ersten Hash, überschreiben dadurch die Werte des ersten Hashes. Beispiel-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 #! /usr/bin/perl use strict; use warnings; use Data::Dumper; $Data::Dumper::Sortkeys = 1; my $in1 = 'data1.txt'; my $in2 = 'data2.txt'; # fill hashes (quick and dirty!!!) my %hash1 = map { chomp; split m{;}, $_, 2 } grep { ! /^Kuerzel/ } do { open my $fh, '<', $in1; <$fh> }; my %hash2 = map { chomp; split m{;}, $_, 2 } grep { ! /^Kuerzel/ } do { open my $fh, '<', $in2; <$fh> }; # fill result hash; entries of hash2 OVERWRITE those from hash1 my %result = ( %hash1, %hash2 ); # check data print Dumper( \%hash1, \%hash2, \%result ); __END__ Content of data files * data1.txt: Kuerzel;Gesetz ABC;abc DEF;def GHI;ghi * data2.txt Kuerzel;Gesetz ABC;123 JKL;jkl Script's result (with comment of the source): $VAR1 = { 'ABC' => 'abc', 'DEF' => 'def', 'GHI' => 'ghi' }; $VAR2 = { 'ABC' => '123', 'JKL' => 'jkl' }; $VAR3 = { 'ABC' => '123', # overwritten by data from data2 'DEF' => 'def', # from data1 'JKL' => 'jkl', # from data2 'GHI' => 'ghi' # from data1 }; Die Übertragung des Dargestellten auf Dein jetziges Skript ist Dir als Aufgabe überlassen ;-) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |