Thread Modulempfehlung für Suchfunktion
(38 answers)
Opened by bianca at 2010-07-11 08:58
Hab da mal was gebastelt.
Was haltet Ihr davon? Gibt es Optimierungs-/Verbesserungsvorschläge? Bin nicht sicher, ob die Hin- und Herschieberei der Variablen so optimal ist oder ich besser mir Referenzen etc. arbeiten sollte. 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 #!/usr/bin/perl -w use strict; use warnings; use diagnostics; my $userinput = '"schöner" auf'; my $verknuepfung = 1; # 1=OR 2=AND my %dateien = ( # dieser Hash simuliert mehrere ASCII-Dateien die per Schleife eingelesen werden 1 => 'Heute ist ein schöner Tag und die Sonne geht auf', 2 => 'Gestern war ein "schöner" Tag und die Sonne ging unter', 3 => 'foo', 4 => 'bar', 5 => 'Vorvorgestern war auch ein schöner Tag wo die Sonne auf ging', ); my @rueck = stringsuche ('bedingung',$userinput,$verknuepfung); my $code = shift @rueck; my $meld = shift @rueck; print "Rückmeldecode $code - $meld\n"; foreach my $text (values %dateien) { my $ergebnis = stringsuche ('suche',$text,@rueck); print "Untersuche '$text' => " . ($ergebnis ? "Treffer\n" : "\n"); } sub stringsuche { my $action = shift; if ($action eq 'bedingung') { my $userinput = shift; my $verknuepfung = shift; my @return; if ($userinput ne '') { if ($verknuepfung =~ /^[1|2]$/) { @return = (1,'OK'); $return[2] = $verknuepfung; push @return,split / /,$userinput; } else { @return = (0,'Verknüpfung falsch, 1=OR oder 2=AND'); } } else { @return = (0,'Kein Suchbegriff eingegeben'); } return @return; } elsif ($action eq 'suche') { my $text = shift; my @bedingung = @_; my $verknuepfung = shift @bedingung; my $return = 0; if ($verknuepfung eq '1') { foreach my $bed (@bedingung) { if ($text =~ /$bed/) { $return = 1; last; } } } elsif ($verknuepfung eq '2') { my $treffer = 0; foreach my $bed (@bedingung) { my $vergleich = quotemeta $bed; if ($text =~ /$vergleich/) { $treffer ++; } } $return = 1 if $treffer == scalar @bedingung; } return $return; } } 10 print "Hallo"
20 goto 10 |