Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8626[/thread]

Muster ersetzen

Leser: 1


<< >> 5 Einträge, 1 Seite
Gast Gast
 2007-01-08 14:23
#72942 #72942
Hallo,

ich habe zwei Textdateien, die ungefähr so aussehen:

Code: (dl )
1
2
3
geht-V
zu-VPART
weit-ADJ


und

Code: (dl )
1
2
geht zu weit
geht einen Schritt zu weit


Ich möchte, dass mein Perlprogramm die Wörter aus der zweiten Datei durch die entsprechenden Buchstaben aus der ersten Datei ersetzt (z.B.: V VPART ADJ) und in eine neue Datei schreibt.

Mein Versuch funktioniert nicht:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
open (DATEI1, <$datei1) or die $!;

while (<DATEI1>) {
   foreach (/([a-zA-Z]+)-([A-Z]+)/) {
       open  (<DATEI2, $datei2) or die $!;
       open  (>DATEI3, $datei3) or die $!;
       s/$1/$2/g;
   }
   print DATEI3;
}
esskar
 2007-01-08 14:40
#72943 #72943
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
versuch es mal; habs nicht getestet
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use strict;
use warnings;

my %lookup = ();
open(F1, "< datei1.txt") or die $!;
while(<F1>) {
$_ =~ s![\r\n]+$!!;
my ($key, $val) = split /-/, $_;
$lookup{$key} = $val;
}
close F1;

my $r = join "|", map keys %lookup;

open(F2, "< datei2.txt") or die $!;
open(F3, "> datei3.txt") or die $!;
while(<F2>) {
s!($r)!$lookup{$1}!ge;
print F3 $_;
}
close F3;
close F3;
pq
 2007-01-08 14:45
#72944 #72944
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
open my $fh, '<', $file1 or die $!;
my %replace = map { chomp; split /-/, $_, 2 } <$fh>;
my $re = join '|', sort { length $b <=> length $a } keys %replace;
close $fh;
open my $in, '<', $file2 or die $!;
open my $out, '>', $file3 or die $!;
while (my $line = <$in>) {
 $line =~ s/\b($re)\b/$replace{$1}/g;
 print $out $line;
}

ansonsten sei dir ein bisschen lektüre wie perlopentut zu empfehlen.\n\n

<!--EDIT|pq|1168260548-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2007-01-08 14:48
#72945 #72945
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
esskar, du brauchst noch \b als begrenzer. und den /e switch braucht man nicht. und map keys %lookup sieht auch falsch aus.\n\n

<!--EDIT|pq|1168260624-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Mary
 2007-01-08 15:11
#72946 #72946
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
Danke für Eure Antworten!
@pq: Es funktioniert.
Lg
Mary
<< >> 5 Einträge, 1 Seite



View all threads created 2007-01-08 14:23.