shinux | Bonjour g conçue un petit moteur de recherche en perl.
Il fonctionne bien mais je voudrais lui a jouté une fonction de trie par pertinence et d'affichage sur plusireur page.
Mais seulement je ne sais pas comment faire (je sais qu'il faut des regxp mais on est faché)
Voici le code source :
Code :
- #!/usr/bin/perl
- $mailCmd = '/usr/sbin/sendmail';
- $fic="base.dat";
- $password="password";
- $page = "resultat.html";
- $maxresult=100;
- $maxcar=250;
- $rubrique = "rubrique.html";
- $message = "message.html";
- $myMail = "vodevil\@wanadoo.fr";
- $merci ="Merci d'avoir pris le temps de vous inscrire";
- $target= "_blank";
- $image='';
- ########################################################################
- $i=0;
- read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
- if ($ENV{'QUERY_STRING'})
- {$buffer = "$buffer\&$ENV{'QUERY_STRING'}";}
- @pairs = split(/&/,$buffer);
- foreach $pair (@pairs){
- ($name,$value) = split(/=/,$pair);
- $value =~ s/%(..)/pack("c",hex($1))/ge;
- $value =~ s/\+/ /g;
- $VALUE{$name} = $value;
- $Form{$name} .= "\0" if (defined($Form{$name}));
- $Form{$name} .= "$value";
- }
- if (defined $Form{'recherche'}) { &recherche; exit; }
- if (defined $Form{'inscription'}) { &inscription; exit; }
- if (defined $Form{'suppression'}) { &supprimer; exit; }
- &rubrique;
- ########################################################################
- # Recherche par mot clés
- ##############
- sub recherche
- {
- open(INF, "$fic" ); @entries = <INF>; close(INF); $count = @entries;
- $mc = "$Form{'mc'}";
- if (!$mc) { &erreur ("ERREUR<BR><BR>Vous n'avez pas donné de mots clefs" ); }
- elsif (length $mc <2) { &erreur ("ERREUR<BR><BR>Votre recherche n'est pas valide" ); }
- elsif (length $mc <3) { &erreur ("ERREUR<BR><BR>Votre recherche n'est pas assez precise" ); }
- elsif (length $mc >30) { &erreur ("ERREUR<BR><BR>Vous avez tapé trop de mots clés" ); }
- $mc =~ s/^\s+//;
- $mc =~ s/\s+$//;
- @mc = split(/ /, $mc);
- open (fic, "$fic" ) || &erreur ("ERREUR<BR><BR>erreur de lecture du fichier $fic : $!" );
- foreach $ligne (<fic> )
- {
- foreach $mc (@mc) { unless ($ligne =~ /$mc/i) {goto ap265; } }
- $i++;
- ($titre[$i],$url[$i],$descr[$i],$rub[$i],$mail[$i],$date[$i]) = split (/\|/, $ligne);
- ap265:
- }
- if ($i >$maxresult) { $txt.= "Il y a trop de résultat à votre recherche. Veuillez la reformuler.</font></P>\n"; }
- else {
- foreach $i (1..$i) { $txt.= "<p>$image$i. <A Href=$url[$i] target=$target>$titre[$i]</A><br><BR><font size=-1>$descr[$i]<br><I>Rubrique : $rub[$i] [$date[$i]]</I></font></P>\n"; }
- }
- if (!$txt) { $txt.= "<center>Il n'y a pas de résultat à votre recherche</center>\n"; }
- $ouvrir=$page;
- &template;
- exit;
- }
- ########################################################################
- # Recherche par rubrique
- ##############
- sub rubrique
- {
- @mc = $Form{'rubrique'};
- if (!$Form{'rubrique'}) { &erreur ("ERREUR<BR><BR>Votre demande est invalide" ); }
- open (fic, "$fic" ) || &erreur ("ERREUR<BR><BR>erreur de lecture du fichier $fic : $!" );
- foreach $ligne (<fic> )
- {
- foreach $mc (@mc)
- {
- ($titre,$url,$descr,$rub,$mail,$date) = split (/\|/, $ligne);
- unless ("$rub" =~ /$mc/i) {goto ap265; }
- }
- $i++;
- ($titre[$i],$url[$i],$descr[$i],$rub[$i],$mail[$i],$date[$i]) = split (/\|/, $ligne);
- ap265:
- }
- foreach $i (1..$i) { $txt.= "<p>$image$i. <A Href=$url[$i] target=$target>$titre[$i]</A><br><BR><font size=-1>$descr[$i]<br><I>$url[$i] [$date[$i]]</I></font></P>\n"; }
- if (!$txt) { $txt.= "<center>Il n'y a pas de lien dans cette rubrique.</center>\n"; }
- $ouvrir=$rubrique;
- &template;
- exit;
- }
|
Si quelqu'un sait comment faire ======> vodevil@hotmail.fr
Merci! |