Nous allons voir comment modifier ce script pour traiter de manière automatique plusieurs fichiers contenant des listes d'URLS.
PRINCIPE GENERAL
Le but est donc toujours de construire un tableau au format html qui recense nos URLs à partir d'un fichier texte, mais cette fois-ci on veut obtenir dans le même fichier .html autant de tableau qu'il y a de fichier .txt !
En programmation, ce type d'action peut être exécuté au moyen d'une boucle.
On sait qu'en bash la boucle for permet de traiter un ensemble d'éléments unité par unité. On va donc pouvoir créer un pseudo ensemble listant le contenu du dossier où sont classés tous nos fichiers d'URL (`ls URLS`) pour créer ensuite une boucle for où une unité correspondra à une ligne de cette ensemble, c'est à dire à un nom de fichier (for fichier in `ls URLS`).
On pourra ensuite insérer à l'intérieur de cette boucle, la partie du script précédent qui permettait de créer une ligne de tableau pour chaque nouvelle ligne contenu dans un fichier texte. Il faudra juste faire attention au nom des variables et à l'emplacement des balises html. Nous allons voir cela dans le paragraphe suivant.
MODIFICATION DU SCRIPT ETAPE PAR ETAPE
Il va falloir commencer par changer l'input. On ne donne plus le nom d'un fichier, mais le nom d'un dossier. On utilise toujours la fonction echo et la fonction read. Le nom du dossier saisi sera enregistré dans une variable qu'on appelle dossier.
read dossier;
Rien ne change en ce qui concerne le fichier Output :
echo "Donnez l'emplacement et le nom du fichier html qui présentera les urls dans un tableau : ";
read tablo;
On enregistre ensuite dans le fichier Output le début du code html. Attention, on ne garde qu'une partie du code précédent puisque toutes les balises qui concernent les tableaux html seront insérées dans les boucles for. (Au fait: on ajoute aussi au passage un "x" à "tableau" dans le titre de notre future page html ;) !)
echo "<html><head><title>tableaux de liens</title></head><body>" > $tablo;
On ouvre ensuite une première boucle selon le principe vu plus haut. On appelle fichier la variable correspondant à une unité de notre ensemble, c'est à dire à un nom contenu dans notre dossier de fichiers d'URLs.
{
Pour chacun de ces noms de fichier, on enregistre dans le fichier Output les balises html ouvrant un nouveau tableau. Pour plus de clarté dans le résultat, on en profite aussi pour insérer avant un titre. (Pour faire simple on reprend simplement le nom du fichier traité, mais on pourrait améliorer ce titre avec l'utilisation d'une nouvelle variable et d'une incrémentation dans la boucle) :
echo "<table border=\"1\" width=\"50%\">" >> $tablo;
Maintenant que les balises d'un nouveau tableau sont créées, on peut y insérer autant de lignes qu'il y d'adresses dans le fichier d'URLs qui est en train d'être traité. Pour cela, on reprend la boucle de notre premier script en indiquant cette fois-ci le chemin relatif vers les fichiers textes (puisqu'ils ne se trouve pas au même emplacement que notre script !).
Une petite astuce : pour écrire ce chemin, on peut justement réutiliser les valeurs de nos variables. Dans notre cas, on a : $dossier = "nom du dossier contenant les fichiers d'URLS" et $fichier = "nom d'un fichier d'URLS". Du coup, $dossier/$fichier est un chemin relatif correct.
i=1;
for nom in `cat $dossier/$fichier`
{
echo "<tr><td align=\"center\" width=\"20\">$i</td><td align=\"center\"><a href=\"$nom\">$nom</a></td></tr>" >> $tablo;
let "i+=1";
}
Une fois cette boucle terminée, on ferme la balise html du tableau correspondant au fichier qui a été traité dans la boucle :
On est alors près pour reprendre la première boucle sur le fichier d'URLs suivant. Pour indiquer cela, on ferme l'accolade correspondant à la première boucle :
}
Une fois que tous les fichiers d'URLs ont été traités, il ne manquera plus qu'à fermer les balises html restées ouvertes, c'est à dire <body> et <html> :
echo "</body></html>" >> $tablo;
Notre fichier html en Output est alors valide. Notre script est terminé !
Voici maintenant ce que ça donne en images :
Le nouveau script avec #commentaires
Affichage de l'organisation des fichiers et exécution du script dans le terminal
Extrait du fichier HTML en Output
Affichage du résultat dans Safari
Super... ça avance bien
RépondreSupprimerVous pourrez intégrer progressivement des raffinements HTML dans vos fichiers de sortie.
On verra aussi mercredi prochain un point concernant l'encodage de votre fichier de sortie...