Thread Vergleich: zweier Arrays und ihrer Elemente (22 answers)
Opened by Gast at 2005-11-28 02:45

coax
 2005-12-13 10:47
#60466 #60466
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Oder so
Code: (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
#!/usr/bin/perl

 use strict;
 use warnings;

 my $file_a = <<EO_FILE_A;
a b c d e
f g h i j
k l m n o
x q y w z
EO_FILE_A

 my $file_b = <<EO_FILE_B;
a b c f e
k o j n p
y w e q a
x q y w z
EO_FILE_B

 open( FILE_A, '<', \$file_a ) or die $!;
 open( FILE_B, '<', \$file_b ) or die $!;

 my $pattern = qr/^\s*$/; # trifft auf leere Zeilen oder nur Whitespaces zu
 my @lines_a = grep !/$pattern/, <FILE_A>;
 my @lines_b = grep !/$pattern/, <FILE_B>;

 close( FILE_A ); close( FILE_B );

 chomp(@lines_a, @lines_b);

 for( my $i = 0; defined $lines_a[$i] && defined $lines_b[$i]; $i++ ) {

     my @parts_a = split /\s+/, $lines_a[$i];
     my @parts_b = split /\s+/, $lines_b[$i];

     next unless $parts_a[0] eq $parts_b[0]; # ueberspringt ungleiche Satznr.

     print "\t\t$lines_a[$i]\t$lines_b[$i]\n";
     print "Satznr: $parts_a[0]\n";
     print "Aufeinanderfolgend gleiche Woerter:";

     # so lange beide Elemente definiert sind und gleiche Inhalte haben ...
     my $j = 1;
     while(    (defined $parts_a[$j] && defined $parts_b[$j])
            && ($parts_a[$j] eq $parts_b[$j])                    ) {

         print " $j";  # ... aktuelle Wortindexnr. ausgeben
         $j++;
     }

     print "\n", '-' x 45, "\n\n";
 }

Das funktioniert nachdem Prinzip wie du es oben beschrieben hast. Kann aber sein dass du etwas anderes suchst. Im Moment werden die Saetze miteinander verglichen die in den Dateien an gleicher Stelle (in gleicher Zeile) stehen.
Ein Satz mit der Nummer 10, der in beiden Dateien vorkommt aber an unterschiedlichen Stellen wuerde niemals verglichen werden.
Womoeglich moechtest du alle Saetze die in beiden Dateien vorkommen miteinander vergleichen, dann musst du natuerlich einen anderen Weg gehen.

PS: Bitte verwende fuer Codezeilen, Beispieldaten, etc. CODE-Tags, generell koennte der Thread etwas kuerze sein wenn der Eroeffnungspost etwas ausfuehrlicher, klarer formuliert und mit Beispieldaten ausgestattet wurden waere. Thx :)\n\n

<!--EDIT|coax|1134463945-->
,,Das perlt aber heute wieder...'' -- Dittsche

View full thread Vergleich: zweier Arrays und ihrer Elemente