Schrift
[thread]9162[/thread]

Zwei Dateien vergleichen



<< >> 5 Einträge, 1 Seite
Mary
 2007-07-06 14:13
#78278 #78278
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte hier meine Frage aus einem anderen Thread nochmal stellen. Vielleicht kann mir jemand helfen. Bin leider nicht so fit im Programmieren, muss aber diese Aufgabe unbedingt lösen!

Es geht um zwei Textdateien, die Einträge der Form

jmd. hat ein Haus
jmd. hat ein Auto
jmd. baut ein Haus

enthalten.

Es soll überprüft werden, ob die Einträge aus Datei2 auch in Datei1 enthalten sind und wenn es nicht der Fall ist, muss Datei1 um die fehlenden Einträge ergänzt werden.

Hier ist eine Lösung, die aus jedem Eintrag das großgeschriebene Wort herausfiltert und als Abgleichkriterium benutzt. Diese Lösung funktioniert ganz gut, muss aber dadurch ergänzt werden, dass auch nach dem Verb gesucht wird:

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
#!/usr/bin/perl

use strict;
use warnings;
use Tie::File;

my $file_one = 'Datei1.txt';
my $file_two = 'Datei2.txt';

open my $fh, '<', $file_one or die $!;
tie my @lines, 'Tie::File', $file_two or die $!;

while( my $line = <$fh> ){
   chomp $line;
   my @words = $line =~ /\b([A-Z].*?)\b/g;
   for my $word ( @words ){
       unless( check( $word, @lines ) ){
           push @lines, $line;
       }
   }
}

untie @lines;

close $fh;

sub check{
   my ($value) = shift;
   for my $line ( @_){
        return 1 if $line =~ /\Q$value\E/;
   }
   return;
}


Ich freue mich über jeden Tip!

Danke und Gruß

Mary
renee
 2007-07-06 14:54
#78279 #78279
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es ist ziemlich schwierig, das Verb herauszufinden...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Mary
 2007-07-06 15:38
#78280 #78280
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
Ich stelle es mir so vor: Da jeder Eintrag die gleiche Form hat, müsste ich dann nur nach dem zweiten Wort in der Zeile suchen, das auf "-t" endet.

Der Algorithmus wäre ungefähr so:

- für jede Zeile in Datei2 suche das 2. Wort, dass auf "-t" endet
- suche dieses Wort in Datei1
- wenn gefunden --> vergleiche das großgeschriebene Wort
- wenn nicht gefunden --> schreibe die Zeile aus Datei2 in Datei1

Habe ich es einigermaßen verständlich erklärt? :)
renee
 2007-07-06 15:50
#78281 #78281
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
in Deinen Beispielen ist es jeweils das erste Wort, das auf "t" endet ;) Und dann fallen so Sätze wie "ich sehe ein Haus" weg...

Aber gut... (ungetestet)

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
#!/usr/bin/perl

use strict;
use warnings;
use Tie::File;

my $file_one = 'Datei1.txt';
my $file_two = 'Datei2.txt';

open my $fh, '<', $file_one or die $!;
tie my @lines, 'Tie::File', $file_two or die $!;

while( my $line = <$fh> ){
   chomp $line;
   my @words = $line =~ /\b([A-Z].*?)\b/g;
   my ($verb) = $line =~ /\b([a-z]+t)\b/;
   for my $word ( @words ){
       unless( check( $word, $verb, @lines ) ){
           push @lines, $line;
       }
   }
}

untie @lines;

close $fh;

sub check{
   my ($value) = shift;
   my ($verb) = shift;
   for my $line ( @_){
        if( $line =~ /\Q$value\E/ and $line =~ /\Q$verb\E/ ){
            return 1;
        }
   }
   return;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Mary
 2007-07-06 17:50
#78282 #78282
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
Stimmt, es ist jeweils das erste Wort, aber es ist immer eine Sache der Perspektive... :)

Alle Einträge haben die gleiche Struktur (3. Person), also müssen die Sätze wie "ich sehe ein Haus" nicht berücksichtigt werden. Die Lösung funktioniert super!

Vielen Dank!!! :)
<< >> 5 Einträge, 1 Seite



View all threads created 2007-07-06 14:13.