Programme perl
dragnyon
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
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.
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.
A voir également:
- Programme perl
- Programme demarrage windows - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
4 réponses
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 :
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
Dal
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>/iet
m/href=".*?$mot[s]?.*?"/i...
Dal
La date pour la soutenance de ton travail étant passée selon le fichier .pdf faisant partie de ta 30aine de fichiers, je ne pense pas que tu vas revenir sur le forum. Si tu reviens, tu es le bienvenue, bien sûr, et je t'invite à poser toute question sur ce que tu ne comprends pas :-)
Cela étant dit, cette discussion risque de ne pas être comprise par d'autres internautes tombant sur ce topic.
Alors, pour plus de clarté, voilà ce que donnerait un programme corrigé, commenté, supprimant les variables et syntaxes inutiles et correctement indenté :
à l'exécution :
Cela étant dit, cette discussion risque de ne pas être comprise par d'autres internautes tombant sur ce topic.
Alors, pour plus de clarté, voilà ce que donnerait un programme corrigé, commenté, supprimant les variables et syntaxes inutiles et correctement indenté :
#! /usr/bin/perl use strict; use warnings; my ($fich, $mot) = @ARGV; # on charge les lignes du fichier dans un tableau my $lec; open ($lec,"<",$fich) or die "erreur sur $fich"; my @lines = <$lec>; close($lec); # compteur de points my $nb = 0; # on compte le nombre d'occurrences pour cette expression foreach (@lines) { if (/[ >]$mot[s]?[ \.\;\,\:<]/i) { $nb++; } } # chaque balise title ou href contiennant au moins une fois # le mot recherché donne des points supplémentaires foreach (@lines) { if (/<title>.*?$mot[s]?.*?<\/title>/i) { $nb = $nb + 3; } if (/href=".*?$mot[s]?.*?"/i) { $nb = $nb + 2; } } # résultat print "$fich $nb\n";
à l'exécution :
$ ./exo2.pl page22.html cairo
page22.html 201
$