Valid XHTML     Valid CSS2    

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

 

Table des matières cliquable

  1. Awk : compter les fichiers par extension

  2. Rexx : déplacement rapidement dans les répertoires et sauvegarde

  3. Perl : créer une page de titre en PDF

  4. Perl : produire un document RTF (Word) pour des listes de fichiers

  5. Php : produire un document CSV (Excel) ou RTF (Word) pour des listes de fichiers

  6. Tcl/Tk : visualisation rapide de fichiers

  7. Tcl/Tk : visualisation d'un arbre symbolique avec ramifications

  8. Php : produire un histogramme en .PNG à l'aide de JpGraph

  9. Php : produire des boxplots et beanplots

10. Et R, alors ? Et Sweave ?

 

Il est possible d'afficher toutes les solutions via ?solutions=1.

 

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 :  

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 :  

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 :  

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 :  

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 :  

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 :  

Consulter le fichier listgh_tcl.txt. En voici deux copies d'écran  :

listgh1.png listgh2.png

 

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 :

app.jpg

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 :  

Oui !

Ma page jphistopct montre comment réaliser une telle implémentation, ce qui permet de produire des histogrammes comme ci-dessous :

http://forge.info.univ-angers.fr/~gh/jphistopct.php?vdata=5_20_10_15&titr=B%E9n%E9fices%20pour%204%20mois%20significatifs&xmrks=Jan_Juin_Aout_Dec&tailx=400&taily=250

 

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 :  

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.
bb.png

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 :  

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 gH    Retour à la page principale de   (gH)