Langages de scripts, automatisation de commandes et
production de documents structurés :
6. Production automatique de documents structurés
gilles.hunault "at" univ-angers.fr
1. Awk : compter les fichiers par extension
On voudrait connaitre le nombre de fichiers par extension d'un répertoire et le cumul de leur taille (par exemple, 15 fichiers .txt de taille cumulée 250 kO, 3 fichiers .rex de taille 30kO...). Implémenter la solution avec Gawk.
Solution : masquer la solution
Consulter le fichier statdir_awk.txt. qui s'applique au fichier dir.dir obtenu par ls -al > dir.dir.
# statdir.awk : gestion de répertoire (nb de fichiers par extension) BEGIN { nbf = 0 } /-/ && $1 !~ /^d/ && $8 != "dir.dir" { ip = index($8,".") if (ip > 0) { ext = substr($8,1+ip) } else { ext = "???" } tot[ext] += $5 ; nb[ext] ++ ; nbf++ ; tgen += $5 } # fin de traitement des lignes retenues END { print "--- ext nb_fich cumul_taille (kO)" for (ext in tot) { printf (" %-15s %3d %12d\n" , ext , nb[ext] , tot[ext]/1024 ) } # fin de pour if (nbf==0) { print " mais je n'ai vu aucun fichier !! "} else { tgen = tgen/(1024*1024) print " soit en tout " sprintf("%7d",nbf) " fichiers et " sprintf("%5.2f",tgen) " Mo " } } # fin du END
2. Rexx : déplacement rapidement dans les répertoires et sauvegarde
Au lieu de la commande Unix ou Dos nommée cd on voudrait disposer d'une commande go qui n'utilise que deux ou trois lettres pour aller dans le "bon" répertoire. Implémenter une solution Rexx avec un tableau associatif qui fournit une table de correspondance entre le "vrai" chemin et l'abbréviation.
Solution : masquer la solution
Il s'agit de l'exercice 1 de la partie 2 de mon cours SAC ; la correction des exercices est nommée sacor.
3. Perl : créer une page de titre en PDF
Réaliser en Perl une commande titre qui produit un document PDF avec une page de titre paramétrée comme titre.pdf obtenu par titre "production automatique ; de documents structurés". Afin de voir ce qui est fixe et ce qui est variable, on pourra comparer xmp1.tex et xmp2.tex obtenus respectivement par les commandes titre demo1 et titre "demo 2 ; sur deux lignes".
Solution : masquer la solution
Consulter le fichier titre_pl.txt.
La dernière commande utilisée, nommée dct est en fait l'appel du script dct.rex qui compose avec LaTeX le document créé par Perl et qui vient le convertir en PDF.
/* (gH) -_- dct.rex ; TimeStamp (unix) : 09 Novembre 2011 vers 10:49 */ parse arg nomf /* si pas de paramètre, rappel de la syntaxe */ if nomf="" then do say " dct : d'un .tex à un .ps puis à un pdf " say " syntaxe : dct nom_de_fichier[.tex] " return end /* si le fichier se termine par ., on le retire */ if (substr(nomf,length(nomf),1)=".") then nomf = substr(nomf,1,length(nomf)-1) /* si le fichier se termine par .tex (à cause de la complétion via tab) */ /* on le retire */ /* if (substr(nomf,length(nomf)-3,4)=".tex") then nomf = substr(nomf,1,length(nomf)-4) */ if (index(nomf,".tex")>0) then nomf = substr(nomf,1,length(nomf)-4) /* donc maitenant on peut ajouter .ps " */ nomf = nomf || ".ps" /* commande à exécuter */ cmd = "ps2pdf " nomf say cmd cmd
4. Perl : produire un document RTF (Word) pour des listes de fichiers
On voudrait obtenir un document lisible par Word avec des styles prédéfinis et une numérotation des pages qui recense les fichiers *.DSC d'un répertoire, par ordre alphabétique et par ordre décroissant de date. On utilisera Perl. Un exemple de fichier résultat est alldsc.rtf.
Solution : masquer la solution
Il s'agit de l'exercice 3 de la partie 1 de mon cours SAC ; la correction des exercices est nommée sacor. Le fichier perl est donc alldsc_pl.txt.
5. Php : produire un document CSV (Excel) ou RTF (Word) pour des listes de fichiers
On voudrait maintenant fournir la même liste de fichiers qu'à l'exercice précédent mais au format Excel de façon à pouvoir effectuer des calculs sur les données de la liste. On utilisera Php en ligne de commande.
Solution : masquer la solution
Cette fois, il s'agit de l'exercice 30 de la partie 5 (php) de mon cours Technologie internet ; la correction des exercices est nommée solutions. Le fichier php est donc alldsc_php.txt.
6. Tcl/Tk : visualisation rapide de fichiers
La visualisation massive de documents avec la commande Unix nommée more est pratique mais incomplète car elle ne permet de visualiser que les contenu textes, pas les informations des fichiers. Réaliser en Tcl/Tk une visualisation «à la Buerg». Plus de détails ici.
Solution : masquer la solution
Consulter le fichier listgh_tcl.txt. En voici deux copies d'écran :
7. Tcl/Tk : visualisation d'un arbre symbolique avec ramifications
Un arbre symbolique ramifié est simplement une chaine de caractères où les crochets représentent une ramification. Implémenter en Tcl/Tk une visualisation de tels arbre. Voici un exemple possible d'interface :
Solution : masquer la solution
Consulter le fichier str2af_tcl.txt.
8. Php : produire un histogramme en .PNG à l'aide de JpGraph
On veut produire régulièrement des histogrammes en PHP via une URL simple. Sachant que JpGraph fournit de tels graphiques, peut-on facilement l'interfacer ?
Solution : masquer la solution
Oui !
Ma page jphistopct montre comment réaliser une telle implémentation, ce qui permet de produire des histogrammes comme ci-dessous :
9. Php : produire des boxplots et beanplots
Une représentation graphique intéressante de valeurs numérique se nomme boxplot en statistiques. Peut-on disposer facilement et rapidement de tels graphiques en Php, via JpGraph par exemple ? et pour les variantes nommées beanplot et violinplot ?
Solution : masquer la solution
Malheureusement, non. Ce sont des graphiques spécialisés. Par contre le logiciel R dispose de fonctions dédiées, avec de nombreuses options. Voir par exemple la documentation R de boxplot(), beanplot() et violinplot(). Ce qu'il reste à faire, c'est interfacer R et Php, ce qui n'est pas très compliqué. Voir par exemple notre fichier statuno.php dont une application se trouve à l'adresse LEADB/Stat. Ci-dessous, un exemple de PNG produit.
R est la fois un langage de scripts et un ensemble de fonctions dédiées aux statisiques et aux graphiques. Le site de dépot est nommé CRAN. On pourra consulter statghfns pour voir des exemples de fonctions programmées en R.
10. Et R, alors ? Et Sweave ?
Pourquoi R n'est-il pas utilisé dans ce cours ? Et Sweave ? Qu'est-ce que Rstudio ? Et shiny ?
Solution : masquer la solution
Comme indiqué à la question précédente, le logiciel R est la fois un langage de scripts et un ensemble de fonctions dédiées aux statisiques et aux graphiques. Il faudrait d'abord suivre un cours de statistiques avant d'en profiter, ce qui dépasse le cadre de ce cours. Sweave est une solution logicielle qui mélange astucieusement du code LaTeX et du code R pour produire des documents avec des résultats statistiques intégrés à la volée. Voir le site officiel de Sweave. Enfin, Rstudio est un éditeur (IDE) qui permet de programmer en R, de façon interactive ou par programme, de produire des documents Sweave et shiny permet de réaliser calculs statistiques avec de l'interactivité.
Code-source php de cette page ; code javascript utilisé. Retour à la page principale du cours.
Retour à la page principale de (gH)