pluriTAL – BLOG Master pluriTAL [ParisX, ParisIII, INALCO]

ME@SAOULED :D

Posted in Projet 2006-2007 by pluritaluser on 30 novembre 2006

EZZAT, Mani.

Hello everyone.

Alors voilà, si je me réfère strictement au sujet de ce mini-projet, je peux dire que je l’ai fini. Néanmoins, je n’ai pas encore ajouté toutes les optimisations que je voulais, à savoir :

Gestion des liens morts (OK)

C’est assez simple à mettre en place en utilisant une certaine variable d’environnement intégré dans Perl.

Afficher un tableau de 20 lignes maximum, passer sur une autre page après, en prenant soin de mettre des links sur la page précedente et suivante (OK)

Ca a l’air simple comme ca, mais croyez-moi, c’est probablement l’option la plus difficile à implémenter niveau code, car cette mini option va impliquer de nombreuses structures conditionnelles imbriquées et si cela reste lisible, ce n’est pas abordable par le premier venu. Oubliez pas que la premiere page n’a qu’un seul lien vers la suivante, la derniere page n’a qu’un seul lien vers la précédente, et tout les pages entre ont deux liens pointant vers la suivante et la précédente. Si vous traitez les « else » quand il faut les traiter, en considérant que ces structures conditionnelles imbriquées, sont elle même comprises dans des boucles imbriquées, on s’en sort plus.

Petit tips pour vous aider : Vous pouvez rester à deux variables en utilisant la condition (pour 20 lignes dans un tableau) « if($i%20==0) etc… ». J’avais déja rencontré un problème similaire auparavant, donc ici, j’ai immédiatement pensé à l’utilisation du modulo, qui indique LE RESTE d’une division. Donc si on se base sur des tableaux de 20 lignes, il suffit de vérifier que votre compteur est divisible par 20 (ou que son reste soit égal à 0 en d’autres termes). Si vous passez par une troisième variable pour la comparaison, en considérant la structure du code (les conditions, les boucles), vous allez droit en enfer. Car incrémenter ou décrémenter au bon endroit est vital ici.

-gestion des redirections, des pages non-html (NON-OK)

GET marche pas, wget non plus, on a tesé ça tout à l’heure. D’apres Mr Fleury, il y aurai peut-etre un nouveau browser en ligne de commande style Lynx qui permettrait d’arriver à nos fins.

-portabilité totale du code (NON-OK)

A l’heure actuel, mon code est portable sur toutes les machines, à condition de respecter l’arbo du projet, et que le répertoire courant soit programmes/ lorsque vous appelez le script. Il est possible de rendre le projet portable à toutes les machines ET qu’on puisse l’appeller de n’importe où dans l’arborescence de n’importe quelle bécane, mais cela implique d’utiliser la variable d’environnement $0 (implémentée dans bash comme dans perl), de se battre avec une regexp afin de pouvoir récupérer le chemin à partir duquel vous avez call le script, et d’agir en fonction dans les différents path de votre code. (désolé Rachid, j’ai oublié la regexp que tu m’avais si gentiment expliqué, je te resoaulerai pour l’avoir :D)

Un peu lourd en somme. Suffit d’avertir l’utilisateur de bien vérifier d’être au bon endroit:/

– Design (NON-OK)

j’avais commencé à étoffer le tableau esthétiquement, genre mettre une jolie bannière que j’aurai au préalable réalisée sous PHOTOSHOP (c’est toujours bon photoshop pour les design de site, avec son systeme de layout/calque), mais je me suis aperçu que si je devais modifier un truc dans mon script, ca allait foutre tout mon design par terre. Normal me direz-vous, étant donné qu’on gere la création du site en HTML par une boucle, et qu’il est impossible de revenir en arrière dans une boucle…

pas tout à fait impossible en fait en perl (attention, je ne fais pas de propagande pour perl, au contraire même, j’ai justement trouvé un énorme défaut là). Perl permet de sortir d’une boucle et de revenir derriere dans le code, grâce au system des LABEL. Ceux qui ont déjà fait de l’assembleur, c’est exactement la même chose. Vous allez définir un bloque avec un LABEL et y revenir quand vous voulez avec un GOTO. Perl permet une chose similaire, mais le problème c’est que comme en assembleur, cela va TRES vite devenir complètement incomprhénsible pour le commun des mortels. C’est pour cette raison que beaucoup de gens dénigrent Perl, car les scripts deviennent très vite illisibles.

En ce qui concerne les fonts et autre, cela reste possible et facile à réaliser, sans pour autant toucher à la maléabilité du code. C’est encore plus simple en ce qui concerne les regexp, puisqu’en perl vous pouvez stocker les occurences et leur contextes dans des variables…

DIVERS (OK?)

J’ai ajouté d’autres options utiles, comme par exemple le fait de gérer les erreurs lors de la saisie du fichier dans lequel se trouve la liste d’url. Si on tappe un fichier qui existe pas, mon script s’arretera après avoir afficher un truc du genre « fichier introuvable ». Ce n’est pas un billet gagnant pour l’Euromillion certes, mais c’est toujours ça de fait. En perl c’est simple a faire, et ça se résume en 1 demi-ligne.

Voili Voilou, je vais c/p mon code derriere si ça interesse qqn, je le considère « propre », mais il reste difficile d’accès à la lecture, même avec des commentaires.


#!/usr/bin/perl
$i=0;
$j=0;
print « File le nom du fichier url qui se trouve dans le folder LISTES-URL! \n »;
$url=<STDIN>;
print « $url »;
chomp($url);
open(LECTURE, « ../LISTES-URL/$url ») or die »impossible de trouver $url!! `\n »;
print « File le nom du file SANS EXTENSION pour le tableau en html qui sera saved dans le folder programmes/ ffs! \n »;
$my_tab=<STDIN>;
print « $my_tab »;
chomp($my_tab);
open(ECRITURE, « >$my_tab$j.html »);
print ECRITURE « <html>\n<head>\n<title>tableau de liens</title>\n</head><body>\n<table border=\ »1\ »>\n » ;
while($ligne=<LECTURE>)
{
print $ligne;
chomp($ligne);
print ECRITURE « <tr><td><a href=\ »$ligne\ »>URL$i</a></td> »;
$wgett= »wget -O ../PAGES-ASPIREES/toto$i.html $ligne »;
system($wgett);
if($?==0)
{
print ECRITURE « <td><a href= \ »../PAGES-ASPIREES/toto$i.html\ »>FILE$i</a></td> »;
$lynx= »lynx -dump ../PAGES-ASPIREES/toto$i.html > ../DUMP-TEXT/toto$i.txt »;
system($lynx);
print ECRITURE « <td><a href= \ »../DUMP-TEXT/toto$i.txt\ »>TEXT$i</a></td> »;
$contextfile= »../DUMP-TEXT/toto$i.txt »;
open(CONTEXTE, « $contextfile »);
$i++;
while($lignetxt=<CONTEXTE>)
{
if($lignetxt =~ /barrage/i)
{
$avant = $`;
$apres = $’;
$barrage = $&;
print ECRITURE « <td><i>…$avant<b>$barrage</b>$apres…</i></td></tr> »;
if($i%20==0 || eof(LECTURE))
{
if($j==0)
{
$j++;
print ECRITURE « <align=\ »center\ »><a href=\ »$my_tab$j.html\ »>next</a></align></table></body></html> »;
close(ECRITURE);
open(ECRITURE, « >$my_tab$j.html »);
print ECRITURE « <html>\n<head>\n<title>tableau de liens</title>\n</head><body>\n<table border=\ »1\ »>\n » ;
}
else
{
$j–;
print ECRITURE « <align=\ »center\ »><a href=\ »$my_tab$j.html\ »>prec</a></align> »;
$j++;
$j++;
if(<LECTURE>)
{
print ECRITURE « <align=\ »center\ »><a href=\ »$my_tab$j.html\ »>…next</a></align> »;
close(ECRITURE);
open(ECRITURE, « >$my_tab$j.html »);
print ECRITURE « <html>\n<head>\n<title>tableau de liens</title>\n</head><body>\n<table border=\ »1\ »>\n » ;
}

}

}
last;
}

}
}
else
{
close(CONTEXTE);
print ECRITURE « <td>PROBLEME</td> »;
print ECRITURE « <td>PROBLEME</td> »;
print ECRITURE « <td>PROBLEME</td></tr> »;
if($i%20==0 || eof(LECTURE))
{
if($j==0)
{
$j++;
print ECRITURE « <align=\ »center\ »><a href=\ »$my_tab$j.html\ »>next</a></align></table></body></html> »;
close(ECRITURE);
open(ECRITURE, « >$my_tab$j.html »);
print ECRITURE « <html>\n<head>\n<title>tableau de liens</title>\n</head><body>\n<table border=\ »1\ »>\n » ;
}
else
{
$j–;
print ECRITURE « <align=\ »center\ »><a href=\ »$my_tab$j.html\ »>prec</a></align> »;
$j++;
$j++;
if(<LECTURE>)
{
print ECRITURE « <align=\ »center\ »><a href=\ »$my_tab$j.html\ »>…next</a></align> »;
close(ECRITURE);
open(ECRITURE, « >$my_tab$j.html »);
print ECRITURE « <html>\n<head>\n<title>tableau de liens</title>\n</head><body>\n<table border=\ »1\ »>\n » ;
}

}

}
$i++;
}
}

print ECRITURE « \n</table>\n</body>\n</html> »;
close(LECTURE);
close(ECRITURE);

Cela devient plus gros deja:/ et ce, en ayant ajouté seulement 2, 3 trucs:/

Have fun ceux qui vont essayé de le lire:/

Publicités

Une Réponse

Subscribe to comments with RSS.

  1. tal-p3 said, on 30 novembre 2006 at 11:45

    Ci-dessous, la référence du navigateur en ligne de commande à tester :

    elinks – lynx-like alternative character mode WWW browser
    http://elinks.cz/

    SF


Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :