Thread Modulempfehlung für Suchfunktion (38 answers)
Opened by bianca at 2010-07-11 08:58

bianca
 2010-07-19 18:51
#139945 #139945
User since
2009-09-13
7016 Artikel
BenutzerIn

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

View full thread Modulempfehlung für Suchfunktion