Programme perl

dragnyon -  
-
Bonjour,
j'aurais besoin de votre aide pour mon projet en perl (vous pouvez voir le sujet et les programme que j'ai fais ici https://transfernow.net/02bfp7o17g7c ), j'ai réussi à faire le exo1.pl mais je bloque pour le exo2.pl le programme me donne page22.html, 624 alors que je devrai trouvé page22.html 201 je travail depuis des heures dessus sans trouver la solutions
merci d'avance de votre aide.

4 réponses

dragnyon
 
up
0
dragnyon
 
up!
0

 
Salut dragnyon,

Si tu veux de meilleures chances de recevoir de l'aide rapidement, il faut faciliter la vie aux membres du forum, au lieu de renvoyer vers une archive en ligne avec près d'une 30aine de fichiers, sans explications sur ce que le code est sensé faire et avec quoi.

A l'avenir, poste un code minimal exploitable avec des données de test illustrant ton problème, au lieu de contraindre le lecteur, qui n'a peut être pas le temps, ni la motivation, d'aller à la pêche aux informations.

Alors, après avoir fait un peu d'exploration, voilà le code que tu as rédigé pour ton exo2.pl :

#! /usr/bin/perl
use strict;
use warnings;



{ my ($fich, $mot) = @ARGV;
  my $ligne;
  my $lec;
  my $nb=0;
  my $nbmot=0;

  open ($lec,"<",$fich) or die "erreur sur $fich";
   while (<$lec>)
  { $ligne=$_;
      
    
    if ($ligne=~ m/[ >]$mot[s]?[ \.\;\,\:<]/i)
     {$nb++;
      
          if($ligne=~ m/[<title<|<\/title>]/)
            {$nb=$nb+3;
            }
          if($ligne=~ m/href/)
          {$nb=$nb+2;
          }
          
         
     } 
  }
  close($lec);
  print "$fich, $nb";
}



Ton indentation n'est pas claire, mais, en l'occurrence, l'un des problèmes avec ton script exo2.pl est que tu cherches la présence des balises title et href à l'intérieur des lignes matchant la première expression. Du coup, par exemple, tu comptabilises des occurrences de lignes matchant la première expression et où il y a un lien sur une ligne mais où le mot clef ne se trouve pas à l'intérieur de la balise href.

Tu dois donc faire 2 passes (tu devrais faire 2 boucles, en mettant le contenu du fichier dans un tableau, afin d'éviter d'avoir à faire 2 lectures du fichier, ainsi tu ferais deux boucles foreach sur le tableau).

Tes expressions rationnelles sont également fausses et devraient être
m/<title>.*?$mot[s]?.*?<\/title>/i
et
m/href=".*?$mot[s]?.*?"/i
...

Dal
0