Thread Suffix zerlegen
(3 answers)
Opened by kimmy at 2011-11-24 12:48
Ich würde mal vermuten dass perl durcheinander kommt da du das Array verkürzt und gleichzeitig durchgehst.
Mein Ansatz wäre so: 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 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"; |