Thread Suffix zerlegen (3 answers)
Opened by kimmy at 2011-11-24 12:48

topeg
 2011-11-24 13:37
#154457 #154457
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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";

View full thread Suffix zerlegen