Programa perl
dragnyon
-
[Dal] Mensajes publicados 6122 Fecha de registro Estado Colaborador Última intervención -
[Dal] Mensajes publicados 6122 Fecha de registro Estado Colaborador Última intervención -
Hola,
necesito tu ayuda para mi proyecto en Perl (puedes ver el tema y los programas que he hecho aquí https://transfernow.net/02bfp7o17g7c), he logrado hacer el exo1.pl pero estoy bloqueado con el exo2.pl, el programa me da page22.html, 624 cuando debería encontrar page22.html 201, he estado trabajando en ello durante horas sin encontrar la solución
gracias de antemano por tu ayuda.
necesito tu ayuda para mi proyecto en Perl (puedes ver el tema y los programas que he hecho aquí https://transfernow.net/02bfp7o17g7c), he logrado hacer el exo1.pl pero estoy bloqueado con el exo2.pl, el programa me da page22.html, 624 cuando debería encontrar page22.html 201, he estado trabajando en ello durante horas sin encontrar la solución
gracias de antemano por tu ayuda.
4 respuestas
Hola
https://www.commentcamarche.net/infos/25927-mon-message-n-a-recu-aucune-reponse/
y también
https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
--
Cuando era pequeño, el Mar Muerto solo estaba enfermo.
George Burns
https://www.commentcamarche.net/infos/25927-mon-message-n-a-recu-aucune-reponse/
y también
https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
--
Cuando era pequeño, el Mar Muerto solo estaba enfermo.
George Burns
Hola dragnyon,
Si quieres mejores posibilidades de recibir ayuda rápidamente, debes facilitar la vida a los miembros del foro, en lugar de enviar a un archivo en línea con cerca de una treintena de archivos, sin explicaciones sobre lo que se supone que hace el código y con qué.
En el futuro, publica un código mínimo ejecutable con datos de prueba que ilustren tu problema, en lugar de obligar al lector, que puede no tener el tiempo ni la motivación, a ir a buscar la información.
Entonces, después de hacer un poco de exploración, aquí está el código que redactaste para tu exo2.pl:
Tu indentación no es clara, pero, en este caso, uno de los problemas con tu script exo2.pl es que buscas la presencia de las etiquetas title y href dentro de las líneas que coinciden con la primera expresión. Así, por ejemplo, contabilizas ocurrencias de líneas que coinciden con la primera expresión y donde hay un enlace en una línea, pero donde la palabra clave no se encuentra dentro de la etiqueta href.
Por lo tanto, debes hacer 2 pasadas (deberías hacer 2 bucles, poniendo el contenido del archivo en un arreglo, para evitar tener que hacer 2 lecturas del archivo, así harías dos bucles foreach sobre el arreglo).
Tus expresiones regulares también son incorrectas y deberían ser
Dal
Si quieres mejores posibilidades de recibir ayuda rápidamente, debes facilitar la vida a los miembros del foro, en lugar de enviar a un archivo en línea con cerca de una treintena de archivos, sin explicaciones sobre lo que se supone que hace el código y con qué.
En el futuro, publica un código mínimo ejecutable con datos de prueba que ilustren tu problema, en lugar de obligar al lector, que puede no tener el tiempo ni la motivación, a ir a buscar la información.
Entonces, después de hacer un poco de exploración, aquí está el código que redactaste para tu 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 "error en $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"; } Tu indentación no es clara, pero, en este caso, uno de los problemas con tu script exo2.pl es que buscas la presencia de las etiquetas title y href dentro de las líneas que coinciden con la primera expresión. Así, por ejemplo, contabilizas ocurrencias de líneas que coinciden con la primera expresión y donde hay un enlace en una línea, pero donde la palabra clave no se encuentra dentro de la etiqueta href.
Por lo tanto, debes hacer 2 pasadas (deberías hacer 2 bucles, poniendo el contenido del archivo en un arreglo, para evitar tener que hacer 2 lecturas del archivo, así harías dos bucles foreach sobre el arreglo).
Tus expresiones regulares también son incorrectas y deberían ser
m/<title>.*?$mot[s]?.*?<\/title>/iy
m/href=".*?$mot[s]?.*?"/i...
Dal
La fecha para la defensa de tu trabajo ya ha pasado según el archivo .pdf que forma parte de tus 30 archivos, así que no creo que vayas a volver al foro. Si regresas, eres bienvenido, por supuesto, y te invito a hacer cualquier pregunta sobre lo que no entiendas :-)
Dicho esto, esta discusión puede que no sea comprendida por otros internautas que caigan en este tema.
Así que, para más claridad, aquí tienes lo que sería un programa corregido, comentado, eliminando las variables y sintaxis innecesarias y correctamente indentado:
al ejecutarlo:
Dicho esto, esta discusión puede que no sea comprendida por otros internautas que caigan en este tema.
Así que, para más claridad, aquí tienes lo que sería un programa corregido, comentado, eliminando las variables y sintaxis innecesarias y correctamente indentado:
#! /usr/bin/perl use strict; use warnings; my ($fich, $mot) = @ARGV; # se cargan las líneas del archivo en un array my $lec; open ($lec,"<",$fich) or die "error en $fich"; my @lines = <$lec>; close($lec); # contador de puntos my $nb = 0; # se cuentan el número de ocurrencias para esta expresión foreach (@lines) { if (/[ >]$mot[s]?[ \.\;\,\:<]/i) { $nb++; } } # cada etiqueta title o href que contenga al menos una vez # la palabra buscada otorga puntos adicionales foreach (@lines) { if (/.*?$mot[s]?.*?<\/title>/i) { $nb = $nb + 3; } if (/href=".*?$mot[s]?.*?"/i) { $nb = $nb + 2; } } # resultado print "$fich $nb\n"; al ejecutarlo:
$ ./exo2.pl page22.html cairo
page22.html 201
$