Programme perl
Fermé
dragnyon
-
16 déc. 2018 à 16:48
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 18 déc. 2018 à 14:38
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 18 déc. 2018 à 14:38
A voir également:
- Programme perl
- Programme demarrage windows 10 - Guide
- Désinstaller programme windows 10 - Guide
- Programme démarrage windows 10 - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
4 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 18 déc. 2018 à 14:19
Modifié le 18 déc. 2018 à 14:19
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
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 18 déc. 2018 à 14:52
Modifié le 18 déc. 2018 à 14:52
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
$