Thread Gesetze vergleichen (3 answers)
Opened by andy at 2013-06-04 15:37

Linuxer
 2013-06-04 16:01
#167988 #167988
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Müssen die Einträge wirklich UNTER denjenigen stehen, die durch Datei2 "überschrieben" wurden?

Wenn nicht, kann man das recht einfach lösen:

  • Man liest alle Einträge aus Datei1 in einen Hash;
  • Man liest alle Einträge aus Datei2 in einen anderen Hash;
  • Man vereint beide Hashes zu einem dritten Hash;


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!

View full thread Gesetze vergleichen