Lundi 23 novembre 2009 1 23 /11 /Nov /2009 20:19
J'espere que jusqu'à présent, vous avez compris le deroulement et que mes explications vous aideront.

J'attire votre attention sur le dernier (pour le moment) script!!!! Eh oui, ce n'est pas fini!!!!

L'objectif de la troisième séance du projet encadré consiste à créer une seconde colonne dans le tableau qui contient ce que l'on appelle une page aspirée.

une page aspirée, c'est à un peu la fonction d'un aspirateur. Ca signifie que l'on souhaite recuperer, extraire seulement  l'information qui nous interesse dans une page donnée.

Voici le script:

#!/bin/bash
echo "Donnez le nom du fichier contenant les liens http : ";
read fic;
echo "Donnez le nom de fichier html où stocker ces liens : ";
read tablo;
echo "<html><head><title>tableau de liens</title></head><body><table border=1>" > $tablo;
i=1
for nom in `cat $fic`
{
wget -O ./PAGES-ASPIREES/$i.html $nom
echo "<tr><td><a href=\"$nom\">$nom</a></td><td><a href=\"../PAGES-ASPIREES/$i.html\">PAGE ASPIREE</a></td></tr>" >> $tablo;
let "i+=1" ;
}
echo "</table></body></html>" >> $tablo;

Comme à l'accoutumé, nous allons essayer de fournir quelques explications:
Nous retrouvons toujours notre boucle (dont vous avez compris le principe j'espere)
for nom in `cat $fic` : lit et affiche le contenu de la variable fic (les liens). La variable Nom prendra successivement les valeurs de la variable fic.

Cependant un autre élément devrait attirer votre attention, en réalité plusieurs éléments:

i=1
wget -O ./PAGES-ASPIREES/$i.html $nom
echo "<tr><td><a href=\"$nom\">$nom</a></td><td><a href=\"../PAGES-ASPIREES/$i.html\">PAGE ASPIREE</a>
let "i+=1"

Alors essayons d'expliquer tout cela:
i est une variable auquel on affecte la valeur 1
Wget est la commande d'aspiration des pages si je puis m'exprimer ainsi.

Que va donc faire la boucle, elle lit le lien http et aspire ces liens ainsi que leur page web (.html), elle place tout ceci dans une deuxieme colonne appelé PAGES ASPIREES qui contiendra un lien actif qui renverra vers le lien et donc sa page web.

Le dernier element let "i+=1" signifie que la boucle va parcourir les fichiers 1 par 1 (let "i+1=1 ainsi i=2) et ainsi de suite.
Une chose fondamentale à retenir, c'est le positionnement de i=1 et let i+=1

i=1 se met en dehors de la boucle (la variable, si on la met à l'intérieur de la boucle, elle ne va générer que des 1)
et i+=1 à l'intérieur de la boucle (pour réaliser le calcul)

Ces précisions faites, voici ce à quoi ressemble dernier script avec la commande w-get
Il suffit de reprendre votre script précédent et de rajouter les éléments w-get au bon endroit.

Script final:
#!/bin/bash
echo "Pour analyser des fichiers dans un répertoire, saisir un chemin S.V.P: "
read dossier;
echo "Répertoire lu et donne le chemin où tu veux créer la page :";
read tablo;
echo "Tableau créé";
echo "<html><head><title>Tableau des liens</title></head>" > $tablo;
echo "<body style=\"background-color: #CC3366;\"><center><p align=\"justify\"><font style=\"font-family:arial;\" color=\"orange\" ><h1>Voici le tableau des liens</h1></font></p><table border=\"1\" bgcolor=\"silver\" width=\"30%\">" > $tablo;
i=1
for fichier in `ls $dossier`
    {
    y=1
    echo "<thead><tr><th>Fichier $Fichier</th><th>PAGES-ASPIREES</th></tr></thead>">> $tablo
   
    for nom in `cat $dossier/$fichier`
        {
        wget -O ./PAGES-ASPIREES/$i.html $nom
       
        echo "<tbody><tr><td><a href=\"$nom\" target=\"_blank\">Url $y</a></font></td><td><a href=\"../PAGES-ASPIREES/$i.html\">PAGE ASPIREE</a></td></tr></tbody>" >> $tablo;
        let "i+=1" ;
        let "y+=1" ;
        }
    }
echo "</table></body></html>" >> $tablo;

Ce script nommé tab-liens2.sh doit être enregistré dans le dossier PROGRAMMES


DANS LE BASH

Il vous faudra réecrire exactement la même chose que précedement puisque ce n'est qu'une modification du script précédent:
$ sh tab-liens2.sh < run_fr.txt (tab-liens2.sh c'est le nom sous lequel le script a été sauvegardé)
echo"Pour analyser des fichiers dans un répertoire, saisir un chemin S.V.P: "
echo"Répertoire lu et donne le chemin où tu veux créer la page :"


Malheuresement, je ne pourrais pas vous montrer le résultat, j'ai un problème d'incompatibilité Cygwin/Windows 7
Je vais essayer de résoudre cela rapidemment pour être en mesure de vous présenter les prochains résultats.

Il y a une chose essentielle que j'oubliais concernant les problèmes d'incompatibilité.
Face à des problèmes de type 'S' 'r, command not found, ceci peut être corrigé par la commande suivante: Dos2unix

Exemple
dos2unix
tab-liens2.sh

Le travail n'est pas encore achevé, à la prochaine....
Je tenais à remercier Marjorie et Kun, de leur grande aide et je souligne à quel point le travail en groupe est primordiale, pour échanger, partager des connaissances, s'entraider....merci









Par Iman Nhari
Ecrire un commentaire - Voir les 0 commentaires
Lundi 23 novembre 2009 1 23 /11 /Nov /2009 19:57
LES TABLEAUX












Par Iman Nhari
Ecrire un commentaire - Voir les 0 commentaires
Lundi 23 novembre 2009 1 23 /11 /Nov /2009 16:24
Nous revoilà pour une troisième édition

Comme toujours petit rappel des phases et étapes précédentes:


PLAN
PHASE 1: CREATION DE L'ARBORESCENCE DE TRAVAIL
PHASE 2: CREATION DE TABLEAUX CONTENANT LES URLS PAR SENS ET PAR LANGUE
2
.1 Etape 1: tableaux de liens actifs (non ordonnés)


2.4 Etape 2: tableaux de liens actifs et ordonnés par sens et langue


A présent, passons à la seconde étape de la phase 2.
Nous souhaitons que nos tableaux puissent être réorganisés.

Voici donc le Script 2, inspiré du script 1, mais nettement améliorè.
Ce script s'inspire aussi du script 4 du cours:

#!/bin/bash
echo "Pour analyser des fichiers dans un répertoire, saisir un chemin S.V.P: "
read dossier;
echo "Répertoire lu et donne le chemin où tu veux créer la page :";
read tablo;
echo "Tableau créé";
echo "<html><head><title>Tableau des liens</title></head>" > $tablo;
echo "<body style=\"background-color: #CC3366;\"><center><p align=\"justify\"><font style=\"font-family:arial;\" color=\"orange\" ><h1>Voici le tableau des liens</h1></font></p><table border=\"1\" bgcolor=\"silver\" width=\"30%\">" > $tablo;

for fichier in `ls $dossier`
    {
    echo "<tr><td align=\"center\" bgcolor=\"silver\" colspan=\"3\"><b style=\"font-family:arial;\">Fichier $fichier</b></td></tr>" >> $tablo;
   
    for nom in `cat $dossier/$fichier`
        {
        echo "<tr><td><font style=\"font-family:arial;\"><a href=\"$nom\" target=\"_blank\">$nom</a></font></td></tr>" >> $tablo;
        }
    }

echo "</table></body></html>" >> $tablo;

N'OUBLIEZ PAS D'ENREGISTRER CE SCRIPT DANS LE DOSSIER PROGRAMMES


Plusieurs explications s'imposent:
  • Tout d'abord se familiariser avec le html, réalisation d'un tableau, <tr>,<td>, le code des couleurs etc...
Voici l'arboresence:
Dans laViedumotmoteur il y a:
Un dossier fr
Un dossier Anglais
Un dossier Arabe

Ces dossiers sont sous le dossier URLS, bien sûr;
$ dossier, si vous avez bien suivi, signifie la valeur de la variable dossier donc des fichiers
$ dossier= $fr ou bien $Anglais ou bien $Arabe
Par exemple
$fr= url-fr_mecanique

$fichier= $url-fr_mecanique
Valeur de la variable $fichier= les liens http://



Encore des explications....

Eh oui, regardez bien le script,il y a deux boucles!!!!!!!!!!
for fichier in `ls $dossier`
for nom in `cat $dossier/$fichier`


Essayons de comprendre ce qu'il se passe...

  • La première boucle signifie que l'on va récuperer le contenu de la variable dossier (Fr, Anglais,Arabe); qui sont donc les fichiers et on va affecter au  "fichier" dans for fichier (qui peut être aussi for "toto", peu importe), les valeurs contenues dans les fichiers en question.
Le processus est donc le suivant: récupération des valeurs et création d'un tableau puis ainsi de suite,voilà donc le rôle de la boucle.

  • La seconde boucle signifie egalement que l'on va récuperer le contenu de la variable fichiers: les liens et le contenu de la variable dossier: les fichiers. La variable nom sera donc affectée de ces valeurs successives et la fonction CAT donnera l'ordre des les afficher.
Le processus est donc le suivant: récupération des valeurs en définitive les liens et création d'un tableau et ainsi de suite, la boucle lit les valeurs une par une et les place dans un tableau.
La finalité est toujours la même, récuperer les valeurs de la variable fichier, mais le BASH ne comprend que si on lui donne les bonnes instructions et le bon chemin à suivre.

Maintenant que nous avons pris le temps d'expliquer le script, voyons comment est-il possible d'organiser le contenu des dossiers pour que le BASH puisse les traiter correctement.

Exemple concret:
Vous vous souvenez de ce qui se trouve dans mon dossier:
Dossier Fr
Dossier Anglais
Dossier Arabe

Nous allons donc créer dans le dossier PROGRAMMES, 3 fichiers qui auront une extension run_.*txt:(* correspond à la langue)
Exemple: run_Anglais.txt, run_fr.txt, run_Arabe.txt (ouvrez un bloc note)

Il ne suffit pas de les creer, en effet ces fichiers vont contenir successivement les chemins et les resultats dans lesquels vont être stockés les valeurs des variables.

Dans un fichier run_fr.txt: indiquez les deux éléments suivants
../URLS/fr = chemin
..TABLEAUX/tab_liens-fr.html= le résultat que l'on souhaite stocker dans un tableau et dont l'extension .html est une page web.
De même pour Anglais et Arabe. Ne faites cette procédure que trois fois (selon le nombre de langue que vous avez bien sûr) mais inutile de le faire pour tous les fichiers, la boucle va le faire pour vous. Elle lira un par un, les liens présents dans les fichiers.  C'EST CA QUE JE TROUVE SUPER.
N'OUBLIEZ PAS D'ENREGISTRER les fichiers Run_*.txt  DANS LE DOSSIER PROGRAMMES


DANS LE BASH:

$
sh tab-liens2.sh < run_fr.txt (tab-liens2.sh c'est le nom sous lequel le script a été sauvegardé)

echo "Pour analyser des fichiers dans un répertoire, saisir un chemin S.V.P: "
"Répertoire lu et donne le chemin où tu veux créer la page :"
echo "Tableau crée"

Cette directive s'applique aussi pour run_Anglais.txt et run_Arabe.txt

ET VOILA

VOICI LES TABLEAUX










Par Iman Nhari
Ecrire un commentaire - Voir les 0 commentaires
Lundi 23 novembre 2009 1 23 /11 /Nov /2009 15:18
Nous allons passer ainsi à la phase 2....

Petit rappel:

PHASE 1: CREATION DE L'ARBORESCENCE DE TRAVAIL

PHASE 2: CREATION DE TABLEAUX CONTENANT LES URLS PAR SENS ET PAR LANGUE

2. 1: Point de départ: le script

Script 1:


#!/bin/bash
echo "Donnez le nom du fichier contenant les liens http : ";
read fic;
echo "Donnez le nom du fichier html où stocker ces liens : ";
read tablo;
echo "<html><head><title>tableau de liens</title></head><body><table border=\"1\">" > $tablo;
for nom in `cat $fic`
{
echo "<tr><td>$nom</td></tr>" >> $tablo;
}
echo "</table></body></html>" >> $tablo;

Ce script est sauvegardé sous le nom de:  fait-tableau-v1.sh

2.2 Etape 1:

ENREGISTRER le script ci-dessus sous le dossier PROGRAMMES
Le dossier PROGRAMMES contient le script qui va être executé par la suite par le shell
Le dossier TABLEAUX va contenir le résultat que l'on souhaite obtenir c'est à dire les trois tableaux contenant les liens.

2.3 BASH SHELL

  • On se place dans notre repertoire courant
Exemple:
$ cd / cygdrive/d/Viedumotmoteur
$ ls Viedumotmoteur

Petite explication: ce que l'on appelle ici Viedumotmoteur correspond au dossier PROJET-MOT-SUR-LE-WEB décrit précédemment.
La commande ls: affiche tout ce qui se trouve sous le dossier ou le répertoire Viedumotmoteur à savoir PROGRAMMES, TABLEAUX, CONTEXTES, PAGES ASPIREES...
SURTOUT N'OUBLIEZ pas l'espace entre cd et le / . Cela ne fonctionnera pas et vous passerez des heures à vous demander ce qu'il se passe et vous vous direz, mais pourtant j'ai bien tout tapé.
Et oui Cygwin est très sensible, faut savoir le ménager...

A présent pour réaliser les tableaux (toujours dans le BASH), ecrivez les commandes suivantes:

Exemple 1:
$ cd / cygdrive/d/Vidumotmoteur/PROGRAMMES
$ sh ./PROGRAMMES/fait-tableau-v1.sh (extension sh)
Donnez les liens du fichier contenant les liens http:
$ ./URLS/Anglais/url-en_outilderecherche.txt (indiquer bien le chemin)
Donnez le nom du fichier html où stocker ces liens:
$./TABLEAUX/tableau-v1.html (indiquer bien l'extension html et le chemin vers où vous souhaitez obtenir les tableaux)

Exemple 2:
$ cd / cygdrive/d/Vidumotmoteur/PROGRAMMES
$ sh ./PROGRAMMES/tab-liens2.sh (extension sh)
Donnez les liens du fichier contenant les liens http:
$ ./URLS/Anglais/url-en_outilderecherche.txt (indiquer bien le chemin)
Donnez le nom du fichier html où stocker ces liens:
$./TABLEAUX/tab-liens2.html (indiquer bien l'extension html et le chemin vers où vous souhaitez obtenir les tableaux)


Voici textuellement ce que vous devez faire. Vous devez ainsi recommencer la manoeuvre pour tous les fichiers qui se trouvent sur votre répertoire. Mais c'est un peu long...
Le résultat que vous obtenez sont des tableaux contenant les liens mais qui ne sont classés ni par sens, ni par langue.
Nous verrons un peu plus tard une commande qui nous permet non seulement de reorganiser tout cela mais aussi de gagner du temps.

Pour le moment, quelques explication s'imposent:

Sur le script, vous voyez cette chose:   for nom in `cat $fic`
Il s'agit d'une boucle. Nom est une variable qui va prendre les valeurs contenues dans fic (fichier).
Quels sont les valeurs de fic? Les liens http
Cat est une commande qui permet  'l'affichage'
$ signifie les valeurs de fic

Nom peut être remplacé par X, Y, toto, titi, ce que vous voulez, c'est une variable.
Si nom [1,2,3,4,5]
print nom: Devinez????
print nom= 1,2,3,4,5
Donc la variable nom va prendre comme valeur tous les liens http contenues dans le fichier url-en_outilderecherche par exemple.
La boucle, FOR, a pour fonction de lire tous les liens....

C'est un peu plus clair, bon continuons alors...

Sur la BASH, remarquez les ./ URLS ou ./ PROGRAMMES OU ./TABLEAUX
Ce sont ce que l'on appelle des chemins relatifs. Le point vous permet de descendre ou de monter dans l'arborescence. Vous pouvez ainsi mettre autant de points que vous voulez. Le BASH doit être sans cesse rediriger vers la bonne direction sans cela, il est perdu.


Bon, on va pas s'arreter en si bon chemin, continuons donc le travail....

Avant de passer à l'etape 2 de la phase 2, il y a une chose qu'il est indispensable de faire.
RENDRE LES LIENS ACTIFS. Pour cela il faut ajouter, le lien:
<a href=\"$nom\" target=\"_blank\">$nom</a>

Voici le nouveau script.
Enregistrer le
Bon, je sais maintenant il faut redonner les mêmes redirections au shell  que précedemment.
c'est un peu long mais c'est de l'entrainement.

#!/bin/bash
echo "Donnez le nom du fichier contenant les liens http : ";
read fic;
echo "Donnez le nom du fichier html où stocker ces liens : ";
read tablo;
echo "<html><head><title>tableau de liens</title></head><body><table border=\"1\">" > $tablo;
for nom in `cat $fic`
{
echo "<tr><td>$nom</td></tr><a href=\"$nom\" target=\"_blank\">$nom</a>" >> $tablo;
}
echo "</table></body></html>" >> $tablo;

Vous obtenez donc à l'issu de cette étape, des tableaux avec des liens actifs, mais toujours pas dans le bon ordre.
On passe donc à la seconde étape de la phase 2.











Par Iman Nhari
Ecrire un commentaire - Voir les 1 commentaires
Lundi 23 novembre 2009 1 23 /11 /Nov /2009 14:02
Bonjour à tous,

Nous sommes de retour. Après une petite panne moteur, ça redemarre enfin.
Ayant passé du temps à bien comprendre d'où vient l'essence du problème, je vais prendre le temps d'expliquer étape par étape et avec le plus de détail possible, les deux scripts que l'on a fait jusqu'à présent.
Je prendrai aussi le temps de définir la notion très importante de"variable".
Etudiants et futurs étudiants, lecteur du blog, ne faites pas l'impasse sur les variables.
Replongez-vous s'il le faut dans vos anciens livres et cours de mathématiques parce que c'est grâce à cela que vous comprendrez la logique des boucles en shell.

Bonne lecture!!!
PHASE 1

Vous devez créer votre environnement de travail (le même pour tous).
Votre environnement numérique doit comporter les dossiers suivants:
CONTEXTES;
DUMP-TEXT;
IMAGES
PAGES-ASPIREES;
PROGRAMMES;
TABLEAUX;
URLS;


Etape 1: creer sur le bureau (poste de travail) un dossier s 'intitulant: PROJET- MOT-SUR- LE-WEB
Ce dossier comportera les sous dossiers répértoriés ci-dessus.

Etape 2: Pour créer ces dossiers, vous avez besoin d'écrire un programme (ou un script ) sur notepad.
Voici le script: (je l'appelerai Script 0, pour désigner le script initial)
Les phrases commençant par un  ( # sont des commentaires)

Script 0ENREGISTRER CE SCRIPT DANS LE DOSSIER PROJET-MOT-SUR-LE-WEB

#!/bin/bash ( # commande de direction vers le Bash Shell= cygwin)
mkdir ./CONTEXTES; (# mkdir= make direction= créer des répertoires)
mkdir ./DUMP-TEXT;
mkdir ./IMAGES;
mkdir ./PAGES-ASPIREES;
mkdir ./PROGRAMMES;
mkdir ./TABLEAUX;
mkdir ./URLS; (# le dossier URLS contiendra le fichier initial d'URLs)

BASH SHELL:
  • on se place dans le repertoire du projet:
# cd /cygdrive/d/MASTER-TAL
# mkdir PROJET-MOT-SUR-LE-WEB
# cd PROJET-MOT-SUR-LE-WEB
# on peut desormais creer l'arborescence de travail

Votre arborescence créee, le travail peut alors commencer...
Garder bien en tête cette arborescence, car elle sera votre chemin vers la reussite du projet..
Par Iman Nhari
Ecrire un commentaire - Voir les 0 commentaires
Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus