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
#!/usr/bin/perl
use strict;
use warnings;
my @list;
open(my $root, "root.txt") or die "kann das Lexikon nicht öffnen: $!";
open(my $begriff, "begriff.txt") or die "kann das Lexikon nicht öffnen: $!";
while(<$begriff>){
chomp;
push @list, $_;
}
while(<$root>){
chomp;
my $lex = $_;
foreach my $string(@list){
if($string =~ /^(.*)$lex$/i){
print "$string\t$1\t$lex\n";
#um zu verhindern, ABCabcd ABCa bcd
@list = grep !/$string/, @list;
}
}
}
print "REST : @list\n";
1
2
3
4
5
6
7
$ perl zerlegen.perl
ABCabcd ABC abcd
EFGabcd EFG abcd
KLMdefg KLM defg
HIJabc HIJ abc
DEFdef DEF def
REST : XYZabc opqr stuv
chomp(my @list = <$begriff>);
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 54 55
#!/usr/bin/perl use strict; use warnings; my $suffix_file="root.txt"; my $begriff_file="begriff.txt"; # Ich vermute mal die Liste mit den Suffixen ist kürzer als die liste mit den Begriffen # Da ist es günstiger diese im RAM zu halten nicht die Liste von Begriffen open(my $suffix_fh, '<', $suffix_file) or die "kann $suffix_file nicht öffnen: $!"; # man kann auch die gesamte Datei in ein Array lesen # und dann aus dem gesamten Array die "\n" am ende entfernen. my @suffixe=<$suffix_fh>; chomp(@suffixe); close($suffix_fh); # liste mit den Begriffen dessen Suffixe nicht identifiziert werden konnten my @unidentifiziert; # Bitte open mit drei Parametern nutzen # das macht hier zwar nicht viel anders, # ist aber weniger fehleranfällig. # Wenn man es sich gleich angewöhnt, # dann geht man einigen ärgerlichen Problemen aus dem Weg open(my $begriff_fh, '<', $begriff_file) or die "kann das $begriff_file nicht öffnen: $!"; # mann kann auch gleich in eine Variable lesen # man muss nicht in $_ zwischenspeichern while(my $begriff=<$begriff_fh>) { chomp($begriff); # Gehe die Liste mit den Suffixen durch # und beende Die Schleife # wenn ein Passendes Suffix gefunden wurde # $gefunden dient dazu einen Begriff in @unidentifiziert zu verschieben, # wenn kein passendes Suffix gefunden wurde. my $gefunden=0; for my $suffix (@suffixe) { if($begriff =~ /^(.*)\Q$suffix\E$/i) { $gefunden=1; print "$begriff\t$1\t$suffix\n"; last; } } if($gefunden==0) { push(@unidentifiziert,$begriff); } } print "REST : @unidentifiziert\n";