Valid XHTML     Valid CSS2    

Listing du fichier pagsd3.php

 

00001     <?php
00002     
# # (gH) -_- pagsd3.php ; TimeStamp (unix) : 07 Janvier 2019 vers 13:25
00003     
error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
00004     include(
"std7.php") ;
00005     include(
"pagsd_inc.php") ;
00006     include_once(
"../statuno.php") ;
00007     
00008     
#######################################################################################
00009     
00010     
debutPage
("PAGSD 3/5","strict","","pagsd.js") ;
00011     
00012     
debutSection() ;
00013     
h1
(s_span("P","gbleu")."roduction ".s_span("A","gbleu")."utomatis&eacute;e de") ;
00014     
h1
(s_span("G","gbleu")."raphiques, ".s_span("S","gbleu")."tatistiques et ".s_span("D","gbleu")."ocuments") ;
00015     
$gh
= s_nbsp(20)." gilles.hunault \"at\" univ-angers.fr" ;
00016     
h2
($gh,"gvert") ;
00017     
pvide() ;
00018     
h2
(" -- partie 3 sur 5 : Documents via $rtf, $csv et $latex ");
00019     
finSection() ;
00020     
00021     
##############################################################################################
00022     
00023     
sdl
(3) ; echo cmt(' pour afficher toutes les solutions : pagsd1.php?solutions=1') ; sdl(3) ;
00024     
00025     
## -------------------------------------------------------------------------------------------
00026     
00027     
debutSection() ;
00028     
00029     
$tableauDesRubriques = array() ;
00030     
$idr
= 0 ;
00031     
$idr
++; $tableauDesRubriques[$idr] = "Petites manipulations avec $gawk" ;
00032     
$idr
++; $tableauDesRubriques[$idr] = "Des exemples pas si simples que cela en $latex " ;
00033     
$idr
++; $tableauDesRubriques[$idr] = "Un trac&eacute; de courbe en $gnuplot+$latex ou $r via $php" ;
00034     
$idr
++; $tableauDesRubriques[$idr] = "Un graphe multi-&eacute;tats en $latex " ;
00035     
$idr
++; $tableauDesRubriques[$idr] = "Affichettes triangulaires de pr&eacute;sentation en $latex pour le Web" ;
00036     
$idr
++; $tableauDesRubriques[$idr] = "Production de documents pour une liste d'&eacute;margement" ;
00037     
#$idr++; $tableauDesRubriques[$idr] = "Production d'un document $rtf via $php pour une liste d'&eacute;margement" ;
00038     #$idr++; $tableauDesRubriques[$idr] = "Production d'un document $latex via $perl et $php pour une liste d'&eacute;margement" ;
00039     #$idr++; $tableauDesRubriques[$idr] = "Production d'un document $rtf , $csv ou Latex via $php pour une liste d'&eacute;margement" ;
00040     
$idr
++; $tableauDesRubriques[$idr] = "Liste de fonctions pour documentation" ;
00041     
$tdmCRLM
= new tdm($tableauDesRubriques) ;
00042     
$tdmCRLM
->titre() ;
00043     
$tdmCRLM
->menu("oui","oui","nou") ;
00044     
00045     
pvide() ;
00046     
00047     
p() ;
00048      echo
"Il est possible d'afficher toutes les solutions via " ;
00049      echo
href
("pagsd3.php?solutions=1","?solutions=1","bouton_fin vert_pastel nou") ;
00050      echo
" et de toutes les masquer avec " ;
00051      echo
href
("pagsd3.php?solutions=0","?solutions=0","bouton_fin jaune_pastel nou").". " ;
00052     
finp() ;
00053     
00054     
finSection() ;
00055     
00056     
debutSection() ;
00057     
00058     
$numSerie
= 1 ;
00059     
$numExo
= 0 ;
00060     
00061     
## -------------------------------------------------------------------------------------------
00062     
00063     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Petites manipualtions avec AWK
00064     
00065     ## -------------------------------------------------------------------------------------------
00066     
00067     
blockquote() ;
00068     
00069     
blockquote() ;
00070     
00071     
p() ;
00072      echo
"Il arrive souvent qu'on doive r&eacute;aliser des \"petites manipulations de texte\" comme par exemple inverser le nom et " ;
00073      echo
" le pr&eacute;nom dans le fichier suivant nomm&eacute; "
.href("prenomNom1.txt")."&nbsp;:" ;
00074     
finp() ;
00075     
00076     
pre_fichier
("prenomNom1.txt","cadrebleu") ;
00077     
00078     
p() ;
00079      echo
"R&eacute;aliser cette inversion en moins d'une minute avec
$gawk." ;
00080     
finp() ;
00081     
00082     
p() ;
00083      echo
"Etendre &agrave; des informations noms et pr&eacute;noms s&eacute;par&eacute;es par des points-virgules, comme dans le fichier "
.href("prenomNom2.txt")."&nbsp;:" ;
00084     
finp() ;
00085     
00086     
pre_fichier
("prenomNom2.txt","cadrebleu") ;
00087     
00088     
p() ;
00089      echo
"Au passage, comment produire une liste tri&eacute;e par nom quand on utilise le format \"pr&eacute;nom suivi de nom\"&nbsp;?" ;
00090     
finp() ;
00091     
00092     
finblockquote() ;
00093     
00094     
solution
($numExo,$numSerie) ;
00095     
00096     
p
("texte") ;
00097     echo
"
$gawk est un [petit] langage de scripts con&ccedil;u pour ce genre de probl&egrave;mes. Le mot num&eacute;ro 1 d'une ligne est " ;
00098     echo
b
("\$"."1") ;
00099     echo
", le mot 2 est " ;
00100     echo
b
("\$"."2") ;
00101     echo
" donc en gros " ;
00102     echo
b
("print "."\$"."2 \" \" "."\$"."1")." permet d'inverser les mots 1 et 2. D&eacute;monstration&nbsp;:" ;
00103     
finp() ;
00104     
00105     
pre_fichier
("prenomNom1_sol.txt","cadre") ;
00106     
00107     
p() ;
00108      echo
"Si les informations noms et pr&eacute;noms sont s&eacute;par&eacute;s par des points-virgules, comme dans le fichier "
.href("prenomNom2.txt").", il suffit de " ;
00109      echo
" pr&eacute;venir
$gawk d'utiliser le point virgule comme s&eacute;parateur, soit&nbsp;:" ;
00110     
finp() ;
00111     
00112     
pre_fichier
("prenomNom2_sol.txt","cadre") ;
00113     
00114     
00115     
p() ;
00116      echo
"Pour produire une liste tri&eacute;e par nom quand on utilise le format \"pr&eacute;nom suivi de nom\", il suffit de pr&eacute;ciser &agrave; "
.b("sort") ;
00117      echo
" que le crit&egrave;re de tri est la cl&eacute; ("
.em("key")." en anglais, soit l'initiale ".b("k").") num&eacute;ro 2&nbsp;:" ;
00118     
finp() ;
00119     
00120     
pre_fichier
("prenomNom3_sol.txt","cadre") ;
00121     
00122     
finsolution() ;
00123     
00124     
finblockquote() ;
00125     
00126     
## -------------------------------------------------------------------------------------------
00127     
00128     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Un exemple simple en LaTeX
00129     
00130     ## -------------------------------------------------------------------------------------------
00131     
00132     
blockquote() ;
00133     
00134     
blockquote() ;
00135     
00136     
p() ;
00137      echo
"Essayer de reproduire s&eacute;par&eacute;ment en
$latex les pages 3, 28, 61 et 64 du document " ;
00138      echo
href
("rapm.pdf","rapm","gbleuf nou")." dont nous donnons des copies-&eacute;cran ci-dessous (images cliquables)." ;
00139     
finp() ;
00140     
00141     
table
(0,20,"cadre") ;
00142     
tr() ;
00143     
td
("C","valigntop") ; $img = "page3.png" ; echo href($img,img($img,"",400)) ; fintd() ;
00144     
td
("C","valigntop") ; $img = "page28.png" ; echo href($img,img($img,"",400)) ; fintd() ;
00145     
fintr() ;
00146     
tr() ;
00147     
td
("C") ; echo "Page 3 " ; fintd() ;
00148     
td
("C") ; echo "Page 28 " ; fintd() ;
00149     
fintr() ;
00150     
tr() ;
00151     
td
("C","valigntop") ; $img = "page61.png" ; echo href($img,img($img,"",400)) ; fintd() ;
00152     
td
("C","valigntop") ; $img = "page64.png" ; echo href($img,img($img,"",400)) ; fintd() ;
00153     
fintr() ;
00154     
tr() ;
00155     
td
("C") ; echo "Page 61 " ; fintd() ;
00156     
td
("C") ; echo "Page 64 " ; fintd() ;
00157     
fintr() ;
00158     
fintable() ;
00159     
00160     
p
("texte") ;
00161     echo
"Afin d'&eacute;viter la resaisie du contenu de ces pages, les fichiers " ;
00162     echo
href
("page3.txt").", " ;
00163     echo
href
("page28.txt").", " ;
00164     echo
href
("page61.txt")." et " ;
00165     echo
href
("page64.txt")." " ;
00166     echo
" en contiennent le texte "
.em("brut").". On viendra recoder la page 3 en ".b("ASCII 7 bits")." donc sans " ;
00167     echo
" aucun caract&egrave;re accentu&eacute; explicite, la page 28 en "
.b("UTF-8")." et les pages 61 et 64 en ".b("ISO8859-15")." afin " ;
00168     echo
" de comprendre comment on pr&eacute;vient
$latex de ces encodages." ;
00169     
finp() ;
00170     
00171     
p
("texte") ;
00172     echo
"Pour la page 28, le trac&eacute; de la fonction est dans le fichier postscript encapsul&eacute; "
.href("rapm03a.eps").". " ;
00173     
finp() ;
00174     
00175     
p
("texte") ;
00176     echo
"Apr&egrave;s avoir consult&eacute; les quatre fichiers de l'archive "
.href("rapm_pagsd.zip") ;
00177     echo
" expliquer comment fonctionne la num&eacute;rotation et l'affichage des exercices et de leurs solutions." ;
00178     echo
" Au passage, on pourra essayer de deviner comment l'image de la page 28 a &eacute;t&eacute; g&eacute;n&eacute;r&eacute;e. " ;
00179     
finp() ;
00180     
00181     
finblockquote() ;
00182     
00183     
$sous
= 0 ;
00184     
solution
($numExo,$numSerie) ;
00185     
00186     
$sous
++ ; h3($numExo.".".$sous." Reproduction de la page 3") ;
00187     
00188     
p
("texte") ;
00189     echo
"Il n'y a pas beaucoup de difficult&eacute;s &agrave; produire ce d&eacute;but de chapitre
$latex. " ;
00190     echo
" Il faut utiliser la classe "
.b("book").", sans doute utiliser ".b("a4paper")." pour avoir une dimension de page " ;
00191     echo
" fran&ccedil;aise. Il y a trois notations sp&eacute;ciales&nbsp;: les symboles pour l'ensemble N des entiers et pour l'ensemble R " ;
00192     echo
" des r&eacute;els et le symbole losange pour la fin d'&eacute;nonc&eacute; d'exercice. " ;
00193     echo
" On trouvera ci-dessous le code
$latex correspondant nomm&eacute; ".href("page3.tex").". " ;
00194     
finp() ;
00195     
00196     
pre_fichier
("page3.tex","cadrebleu") ;
00197     
00198     
p
("texte") ;
00199     echo
"Apr&egrave;s compilation de ce fichier, on obtient le fichier "
.href("page3.pdf")." qui pour un " ;
00200     echo
" oeil averti contient quelques diff&eacute;rences avec la page originale. " ;
00201     
sdl() ;
00202     echo
" Tout d'abord il y a marqu&eacute; "
.b("chapter")." et non pas ".b("chapitre").". " ;
00203     echo
"
$latex est \"francisable\" mais il faut rajouter quelques instructions pour cela, comme par exemple " ;
00204     echo
b
("\\usepackage[french]{babel}").". " ;
00205     echo
" Pour plus de d&eacute;tails, voir notamment " ;
00206     echo
href
("http://daniel.flipo.free.fr/frenchb/frenchb-doc.pdf","frenchb-doc").". " ;
00207     echo
" Ensuite, il manque un point juste apr&egrave;s le chiffre 1 de "
.b("chapitre 1").", " ;
00208     echo
" ce qui peut se faire en red&eacute;finissant la commande "
.b("\\thechapter").". \n " ;
00209     echo
" On pourra consulter le fichier "
.href("rapm.sty")." utilisable via ".b("\\usepackage{rapm}")." pour voir cette red&eacute;finition. " ;
00210     
sdl() ;
00211     echo
" Le deuxi&egrave;me paragraphe a un retrait de premi&egrave;re ligne que n'a pas l'original, de m&ecirc;me que " ;
00212     echo
" l'intitul&eacute; de l'exercice et son &eacute;nonc&eacute;, mais on pourra se contenter de cette version presque identique &agrave; " ;
00213     echo
" celle propos&eacute;e." ;
00214     
finp() ;
00215     
00216     
$sous
++ ; h3($numExo.".".$sous." Reproduction de la page 28") ;
00217     
00218     
p
("texte") ;
00219     echo
"Si on excepte le haut de page qui reprend le num&eacute;ro et le titre du chapitre, il y a une seule difficult&eacute; dans " ;
00220     echo
" cette page, &agrave; savoir le tableau de variations puisque le trac&eacute; de la fonction est fourni dans le fichier " ;
00221     echo
href
("rapm03a.eps").". " ;
00222     
finp() ;
00223     
00224     
p
("texte") ;
00225     echo
"Pour ce tableau de variations, une solution simple mais un peu longue consiste &agrave; d&eacute;finir une " ;
00226     echo
href
("http://fr.wikibooks.org/wiki/Programmation_LaTeX/Dessiner_avec_LaTeX/Dessiner_en_LaTeX_pur","figure pour $latex") ;
00227     echo
" ou plutot &agrave; utiliser un " ;
00228     echo
href
("http://en.wikibooks.org/wiki/LaTeX/Picture","environnement picture").". " ;
00229     echo
" On commence en g&eacute;n&eacute;rall par &eacute;baucher &agrave; l'aide d'un papier et d'un crayon le tableau de variations et en d&eacute;duire des " ;
00230     echo
" coordonn&eacute;es approximatives de trac&eacute; qu'on reprend ensuite sous
$latex avec les instructions " ;
00231     echo
b
("\\put").", " ;
00232     echo
b
("\\line")." et " ;
00233     echo
b
("\\vector").". " ;
00234     
finp() ;
00235     
00236     
# http://www.tuteurs.ens.fr/logiciels/latex/figures.html
00237     # http://fr.openclassrooms.com/informatique/cours/redigez-des-documents-de-qualite-avec-latex/les-figures-1
00238     # http://fr.openclassrooms.com/informatique/cours/redigez-des-documents-de-qualite-avec-latex/memento-2#r-1621909
00239     # http://www.grad.iit.edu/latex/LaTeX/FigureHelp1.pdf
00240     # http://www.math.wvu.edu/~mays/696/latex_picture_env.pdf
00241     
00242     
p
("texte") ;
00243     echo
" On trouvera ci-dessous le code
$latex correspondant nomm&eacute; ".href("page28.tex").". " ;
00244     
# g&eacute;r&eacute; par le param&egrave;tre $utf de pre_fichier :
00245     # echo " (les caract&egrave;res \"bizarres\" correspondent au rendu ".b("ISO8859-15")." des codes ".b("UTF-8")."). " ;
00246     
echo
" Le rendu est dans le fichier ".href("page28.pdf").". " ;
00247     
finp() ;
00248     
00249     
pre_fichier
("page28.tex","cadrebleu","",1) ;
00250     
00251     
$sous
++ ; h3($numExo.".".$sous." Reproduction de la page 61") ;
00252     
00253     
p
("texte") ;
00254     echo
" On trouvera ci-dessous le code
$latex correspondant nomm&eacute; ".href("page61.tex").". " ;
00255     echo
" Le rendu est dans le fichier "
.href("page61.pdf").". " ;
00256     
finp() ;
00257     
00258     
$sous
++ ; h3($numExo.".".$sous." Reproduction de la page 64") ;
00259     
00260     
p
("texte") ;
00261     echo
" On trouvera ci-dessous le code
$latex correspondant nomm&eacute; ".href("page64.tex").". " ;
00262     echo
" Le rendu est dans le fichier "
.href("page64.pdf").". " ;
00263     
finp() ;
00264     
00265     
$sous
++ ; h3($numExo.".".$sous." Num&eacute;rotation et affichage des exercices et de leurs solutions") ;
00266     
00267     
00268     
p
("texte") ;
00269     echo
"La num&eacute;rotation et l'affichage des exercices et de leurs solutions sont assur&eacute;s par des macros LaTEX. " ;
00270     
finp() ;
00271     
00272     
p
("texte") ;
00273     echo
" Les voici, extraites des fichiers de l'archive "
.href("rapm_pagsd.zip") ;
00274     
finp() ;
00275     
00276     
pre_fichier
("macrosExo.txt","cadrebleu") ;
00277     
00278     
$sous
++ ; h3($numExo.".".$sous." G&eacute;n&eacute;ration de la figure pour la page 28") ;
00279     
00280     
00281     
p
("texte") ;
00282     echo
"L'image est g&eacute;n&eacute;r&eacute;e via le script suivant pour " ;
00283     echo
href
("http://www.gnuplot.info/","gnuplot"). " dont une documentation en fran&ccedil;ais est " ;
00284     echo
href
("https://doc.ubuntu-fr.org/gnuplot","ici").". " ;
00285     
finp() ;
00286     
00287     
pre_fichier
("rapm03a.pls","cadrebleu") ;
00288     
00289     
p
("texte") ;
00290     echo
"Les deux fichiers externes pour les axes, nomm&eacute;s respectivement " ;
00291     echo
b
("rapm03a.ax1")." et " ;
00292     echo
b
("rapm03a.ax2")." sont affich&eacute;s ci-dessous&nbsp;:" ;
00293     
finp() ;
00294     
00295     
pre_fichier
("rapm03a.ax1","cadrejaune") ;
00296     
pre_fichier
("rapm03a.ax2","cadrejaune") ;
00297     
00298     
finsolution() ;
00299     
00300     
finblockquote() ;
00301     
00302     
## -------------------------------------------------------------------------------------------
00303     
00304     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Un trac&eacute; de courbe en gnuplot et LaTeX ou R via PHP
00305     
00306     ## -------------------------------------------------------------------------------------------
00307     
00308     
blockquote() ;
00309     
00310     
blockquote() ;
00311     
00312     
p
("texte") ;
00313     echo
"Ecrire une page
$web en $php qui demande la d&eacute;finition d'une fonction, la plage de " ;
00314     echo
" variations de x puis qui produit un "
.b("PDF")." de la courbe de la fonction via $gnuplot et $latex" ;
00315     echo
" et un "
.b("PNG")." de la courbe de la fonction via $r. " ;
00316     
finp() ;
00317     
00318     
p
("texte") ;
00319     echo
" Y a-t-il un int&eacute;r&ecirc;t &agrave; g&eacute;n&eacute;rer une figure
$latex via $gnuplot plut&ocirc;t qu'un fichier ".b("eps")."&nbsp;?" ;
00320     
finp() ;
00321     
00322     
finblockquote() ;
00323     
00324     
solution
($numExo,$numSerie) ;
00325     
00326     
#p("texte") ;
00327     #echo "Sans probl&egrave;me." ;
00328     #finp() ;
00329     
p
("texte") ;
00330     echo
"H&eacute;las, " ;
00331     echo
" &agrave; ce jour (2016), aucun &eacute;tudiant ni aucun internaute averti n'a fourni de solution satisfaisante. " ;
00332     
finp() ;
00333     
00334     
p
("texte") ;
00335     echo
"Toutefois on pourra lire le document " ;
00336     echo
href
("http://math.univ-lyon1.fr/irem/IMG/pdf/LatexPourProfMaths.pdf","LatexPourProfMaths") ;
00337     echo
" ("
.href("LatexPourProfMaths.pdf","copie locale","gbleuf nou").") et consulter " ;
00338     echo
" les sites de "
.href("http://www.xm1math.net/pstplus/index.html","PstPlus")." " ;
00339     echo
" et "
.href("http://www.xm1math.net/pdfadd/index.html","PdfAdd").". " ;
00340     
finp() ;
00341     
00342     
p
("texte") ;
00343     echo
"Afin de tester " ;
00344     echo
href
("http://www.gnuplot.info/","Gnuplot").", " ;
00345     echo
" on pourra utiliser le script "
.href("pag_01.gpl")." qui affiche &agrave; l'&eacute;cran, " ;
00346     echo
" le script "
.href("pag_02.gpl")." qui produit un fichier ".href("https://en.wikipedia.org/wiki/Encapsulated_PostScript","Postscript encapsul&eacute;") ;
00347     echo
" et le script "
.href("pag_03.gpl")." qui produit le fichier LATEX ".href("pagsd03.tex")."." ;
00348     
finp() ;
00349     
00350     
p
("texte") ;
00351     echo
"Voici le premier script pour Gnuplot&nbsp;:" ;
00352     
finp() ;
00353     
00354     
pre_fichier
("pag_01.gpl","cadrebleu") ;
00355     
00356     
p
("texte") ;
00357     echo
"Contenu du second script&nbsp;:" ;
00358     
finp() ;
00359     
00360     
pre_fichier
("pag_02.gpl","cadrebleu") ;
00361     
00362     
p
("texte") ;
00363     echo
"Contenu du troisi&egrave;me script&nbsp;:" ;
00364     
finp() ;
00365     
00366     
pre_fichier
("pag_03.gpl","cadrebleu") ;
00367     
00368     
finsolution() ;
00369     
00370     
finblockquote() ;
00371     
00372     
## -------------------------------------------------------------------------------------------
00373     
00374     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Un graphe multi-&eacute;tats en LaTeX
00375     
00376     ## -------------------------------------------------------------------------------------------
00377     
00378     
blockquote() ;
00379     
00380     
blockquote() ;
00381     
00382     
p
("texte") ;
00383     echo
"Ecrire un document
$latex qui produit la page suivante&nbsp;:" ;
00384     
finp() ;
00385     
00386     
pre
("cadre") ;
00387     
nbsp
(15) ;
00388     
$img
= "page9.png" ;
00389      echo
href
($img,img($img,"",600)) ;
00390     
finpre() ;
00391     
00392     
p
("texte") ;
00393     echo
"On utilisera "
. href("http://tug.org/PSTricks/main.cgi","PSTricks").". On notera qu'il s'agit de la page num&eacute;ro 9." ;
00394     echo
" Le PDF associ&eacute; est nomm&eacute; "
.href("page9.pdf").". " ;
00395     
finp() ;
00396     
00397     
finblockquote() ;
00398     
00399     
solution
($numExo,$numSerie) ;
00400     
00401     
p
("texte") ;
00402     echo
"Voici le code
$latex. Le fichier-solution se nomme ".href("graphe.tex").". " ;
00403     
finp() ;
00404     
00405     
pre_fichier
("graphe.tex","cadrebleu") ;
00406     
00407     
finsolution() ;
00408     
00409     
finblockquote() ;
00410     
00411     
## -------------------------------------------------------------------------------------------
00412     
00413     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Affichettes triangulaires de pr&eacute;sentation en LaTeX pour le Web
00414     
00415     ## -------------------------------------------------------------------------------------------
00416     
00417     
blockquote() ;
00418     
00419     
blockquote() ;
00420     
00421     
p
("texte") ;
00422     echo
" Une affichette triangulaire de pr&eacute;sentation est une feuille de papier A4 imprim&eacute;e des deux cot&eacute;s avec le nom et le pr&eacute;nom " ;
00423     echo
" d'une personne afin que tout le monde puisse voir son nom, que ce soit les personnes en face ou les personnes &agrave; cot&eacute;. " ;
00424     echo
" Images de d&eacute;monstration&nbsp;:" ;
00425     
finp() ;
00426     
00427     
p() ;
00428     
nbsp
(10) ;
00429     
$img
= "affichette1.jpg" ;
00430      echo
href
($img,img($img,"",300)) ;
00431     
nbsp
(10) ;
00432     
$img
= "affichette2.jpg" ;
00433      echo
href
($img,img($img,"",300)) ;
00434     
finp() ;
00435     
00436     
p
("texte") ;
00437     echo
"Ecrire un document
$latex pour r&eacute;aliser une telle affichette. On pourra utiliser le fichier ".href("affichette.pdf") ;
00438     echo
" comme mod&egrave;le de document &agrave; produire. " ;
00439     echo
" Ecrire ensuite un programme
$php en ".b("CLI")." qui demande un nom, un pr&eacute;nom et " ;
00440     echo
" qui produit ensuite l'affichette correspondante au format
$pdf." ;
00441     
finp() ;
00442     
00443     
p
("texte") ;
00444     echo
"Ecrire enfin une page Web qui utilise un formulaire pour saisir des noms et des pr&eacute;noms (s&eacute;par&eacute;s par des " ;
00445     echo
" points-virgules), &agrave; raison d'une personne par ligne et qui produit un fichier
$pdf avec toutes les affichettes. " ;
00446     echo
" On pourra r&eacute;aliser une version \"classique\" avant de passer &agrave; une solution "
.b("AJAX").". " ;
00447     
finp() ;
00448     
00449     
finblockquote() ;
00450     
00451     
solution
($numExo,$numSerie) ;
00452     
00453     
p() ;
00454     echo
b
("M&eacute;thodologie de d&eacute;veloppement") ;
00455     
finp() ;
00456     
00457     
blockquote() ;
00458     
p
("texte") ;
00459     echo
"Comme il y a plusieurs difficult&eacute;s dans cet exercice, il est sans doute bon de " ;
00460     echo
" r&eacute;fl&eacute;chir &agrave; la m&eacute;thodologie de d&eacute;veloppement &agrave; utiliser. On arrivera &agrave; se convaincre " ;
00461     echo
" qu'il est \"raisonnable\" de &nbsp;:" ;
00462     
finp() ;
00463     
00464     
ul() ;
00465     
debutli
() ; p("texte") ;
00466      echo
" commencer par mettre au point une page
$latex \"fixe\", par exemple avec " ;
00467      echo
" le nom "
.b("Jean DUPOND")." ou ".b("John SMITH").", histoire de r&eacute;gler les " ;
00468      echo
" probl&egrave;mes de taille de texte sur la largeur, de grande police de caract&egrave;res, " ;
00469      echo
" de retournement de texte" ;
00470      echo
"&nbsp;;" ;
00471     
finp
() ; finli() ;
00472     
debutli
() ; p("texte") ;
00473      echo
" d'enchainer avec une macro ou une commande
$latex, qui, &agrave; partir " ;
00474      echo
" du nom et du pr&eacute;nom correctement &eacute;crits (nom en majuscules, notamment) " ;
00475      echo
" vient tout afficher proprement et effectuer un saut de page" ;
00476      echo
"&nbsp;;" ;
00477     
finp
() ; finli() ;
00478     
debutli
() ; p("texte") ;
00479      echo
" d'&eacute;crire ensuite un script
$php qui &agrave; partir d'un fichier texte avec un nom et pr&eacute;nom " ;
00480      echo
" par ligne, produit tout le document
$latex, avec le bon formatage au passege du " ;
00481      echo
" nom et du pr&eacute;nom" ;
00482      echo
"&nbsp;;" ;
00483     
finp
() ; finli() ;
00484     
debutli
() ; p("texte") ;
00485      echo
" de finir en CLI par un script qui ex&eacute;cute le
$php sur le fichier d'entr&eacute;e, compile via $latex " ;
00486      echo
" ou, en mode WEB, qui r&eacute;cup&egrave;re les donn&eacute;es via un formulaire, construit le fichier
$latex, " ;
00487      echo
" compile et met le fichier
$pdf r&eacute;sultat &agrave; disposition." ;
00488     
finp
() ; finli() ;
00489     
finul() ;
00490     
00491     
finblockquote() ;
00492     
00493     
p
("texte") ;
00494     echo
"En effet, pour produire l'affichette, il faut &ecirc;tre capable de " ;
00495     
finp() ;
00496     
00497     
ol() ;
00498     
debutli
() ; p() ;
00499      echo
" produire un texte en grand&nbsp;;" ;
00500     
finp
() ; finli() ;
00501     
debutli
() ; p() ;
00502      echo
" savoir le retourner&nbsp;;" ;
00503     
finp
() ; finli() ;
00504     
debutli
() ; p() ;
00505      echo
" sauter exactement 5 cm et &eacute;crire des pointill&eacute;s." ;
00506     
finp
() ; finli() ;
00507     
finol() ;
00508     
00509     
p
("texte") ;
00510     echo
" Tout ceci n'est pas vraiment un probl&egrave;me pour
$latex, comme le montre le code-source suivant&nbsp;:" ;
00511     
finp() ;
00512     
00513     
pre_fichier
("affichette_Dupond.tex","cadre") ;
00514     
00515     
p
("texte") ;
00516     echo
"Dans la mesure o&ugrave; le code pr&eacute;c&eacute;dent d&eacute;finit une macro "
.b("\\affichette").", " ;
00517     echo
" tout ce que le programme
$php doit accomplir pour produire une affichette se r&eacute;duit &agrave; recopier tout le code " ;
00518     echo
"jusqu'&agrave; "
.b("\\thispagestyle{empty}")." puis &agrave; ins&eacute;rer le bon appel de cette macro avant de terminer le fichier " ;
00519     echo
"
$latex, soit le code $php &nbsp;: " ;
00520     
finp() ;
00521     
00522     
pre_fichier
("affichette.php","cadrejaune") ;
00523     
00524     
p
("texte") ;
00525     echo
"sachant que le d&eacute;but du fichier
$latex &agrave; utiliser " ;
00526     echo
" est dans le fichier "
.href("affichette_debut.latex").". " ;
00527     
finp() ;
00528     
00529     
p
("texte") ;
00530     echo
" La page Web &agrave; r&eacute;aliser pour automatiser ceci, soit " ;
00531     echo
href
("../affichette.php","affichette.php") ;
00532     echo
" ne pr&eacute;sente aucune difficult&eacute; car il s'agit juste de lire les noms, pr&eacute;noms et ins&eacute;rer autant d'appels " ;
00533     echo
" de la macro
$latex que de personnes..." ;
00534     
finp() ;
00535     
00536     
finsolution() ;
00537     
00538     
finblockquote() ;
00539     
00540     
## -------------------------------------------------------------------------------------------
00541     
00542     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Production de documents pour une liste d'&eacute;margement
00543     
00544     ## -------------------------------------------------------------------------------------------
00545     
00546     
blockquote() ;
00547     
$numQue
= 0 ;
00548     
blockquote() ;
00549     
00550     
p
("texte") ;
00551     echo
"On dispose d'une liste d'&eacute;margement comme le fichier "
.href("emarge.txt")." dont le format est tr&egrave;s simple&nbsp;: " ;
00552     echo
" chaque ligne non vide qui n'est pas un commentaire (rep&eacute;r&eacute; par le symbole di&egrave;se) " ;
00553     echo
" comporte une information "
.b("pr&eacute;nom")." puis une information ".b("nom").". Un point virgule s&eacute;pare ces deux informations qui sont parfois " ;
00554     echo
" compos&eacute;es de plusieurs mots. " ;
00555     
finp() ;
00556     
00557     
$numQue
++ ; h3("Question ".$numExo.".".$numQue." : production d'un document $csv pour $excel via $php") ;
00558     
00559     
blockquote() ;
00560     
p
("texte") ;
00561     echo
"Ecrire un programme
$php en ".b("CLI")." qui admet comme seul param&egrave;tre le nom d'un fichier et " ;
00562     echo
" qui produit une liste d'&eacute;margement pour
$excel au format nom (en majuscules), pr&eacute;nom et signature." ;
00563     
finp() ;
00564     
finblockquote() ;
00565     
00566     
$numQue
++ ; h3("Question ".$numExo.".".$numQue." : production d'un document $rtf pour $word via $php") ;
00567     
00568     
blockquote() ;
00569     
p
("texte") ;
00570     echo
"Ecrire un programme
$php en ".b("CLI")." qui admet comme seul param&egrave;tre le nom d'un fichier et " ;
00571     echo
" qui produit une \"belle\" liste d'&eacute;margement pour
$word " ;
00572     echo
" au format num&eacute;ro, nom (en majuscules), pr&eacute;nom et signature." ;
00573     
finp() ;
00574     
p
("texte") ;
00575     echo
"Pour plus d'informations sur "
.b("RTF")." on pourra consulter " ;
00576     echo
" l'exercice 1 de nos cours sur l'"
.href("../Farcompr/sacex.htm","archivage")."." ;
00577     
finp() ;
00578     
finblockquote() ;
00579     
00580     
$numQue
++ ; h3("Question ".$numExo.".".$numQue." : production d'un document $latex via $perl") ;
00581     
00582     
blockquote() ;
00583     
p
("texte") ;
00584     echo
"Ecrire un programme "
.bleu("perl")." en ".b("CLI")." qui admet comme seul param&egrave;tre le nom d'un fichier et " ;
00585     echo
" qui produit une \"belle\" liste d'&eacute;margement en PDF via LaTeX. " ;
00586     
finp() ;
00587     
finblockquote() ;
00588     
00589     
$numQue
++ ; h3("Question ".$numExo.".".$numQue." : production d'une liste d'&eacute;margement via une page Web") ;
00590     
00591     
blockquote() ;
00592     
p
("texte") ;
00593     echo
"Ecrire une page Web en
$php qui demande via un formulaire le nom d'un fichier et une valeur d'option (".b("W").", ".b("E")." ou ".b("L").") et " ;
00594     echo
" pour produire une \"belle\" liste d'&eacute;margement respectivement pour
$word, $excel ou $pdf (via $latex) suivant la valeur de l'option. " ;
00595     
finp() ;
00596     
00597     
p
("texte") ;
00598     echo
"On organisera ce programme &agrave; l'aide de sous-programmes et de fichiers-inclus afin d'en faire ensuite rapidement une page
$web " ;
00599     echo
" avec un formulaire " ;
00600     echo
" o&ugrave; le nom du fichier est remplac&eacute; par la saisie des donn&eacute;es dans un "
.bleu("&lt;textarea&gt;") ;
00601     echo
" ou par la s&eacute;lection du fichier dans l'explorateur sous-jacent. " ;
00602     
#echo " On pourra dans un premier temps se contenter d'un fichier $rtf pour $word et d'un fichier $csv pour $excel." ;
00603     
echo
" On r&eacute;fl&eacute;chira aussi &agrave; ce qu'il faut ajouter pour fournir une \"vraie\" liste d'&eacute;margement utilisable." ;
00604     
finp() ;
00605     
finblockquote() ;
00606     
00607     
finblockquote() ;
00608     
00609     
solution
($numExo,$numSerie) ;
00610     
00611     
p
("texte") ;
00612     echo
"H&eacute;las, " ;
00613     echo
" &agrave; ce jour (2016), aucun &eacute;tudiant ni aucun internaute averti n'a fourni de solution compl&egrave;te satisfaisante. " ;
00614     
finp() ;
00615     
00616     
$numQue
= 0 ;
00617     
00618     
p
("texte") ;
00619     echo
"Voici quelques &eacute;l&eacute;ments partiels de r&eacute;ponses..." ;
00620     
finp() ;
00621     
00622     
$numQue
++ ; h3("R&eacute;ponse ".$numExo.".".$numQue." : production d'un document $csv pour $excel via $php") ;
00623     
00624     
p
("texte") ;
00625     echo
"Une liste d'&eacute;margement n'est jamais qu'un tableau &agrave; trois colonnes. Ici, tout est d&eacute;j&agrave; presque pr&ecirc;t puisque le " ;
00626     echo
" d&eacute;coupage en nom est rep&eacute;rable gr&acirc;ce &agrave; un point virgule. Comme le \"vrai\" s&eacute;parateur est la virgule pour le " ;
00627     echo
" \"vrai\" format "
.href("https://fr.wikipedia.org/wiki/Comma-separated_values","CSV").", " ;
00628     echo
" il reste juste &agrave; mettre le nom des colonnes en d&eacute;but de fichier, inverser nom et pr&eacute;nom et passer le nom en majuscule. " ;
00629     echo
" Ce genre de traitement s'effectue plus facilement ligne &agrave; ligne que globalement et c'est pourquoi nous n'utilisons pas ici " ;
00630     echo
" la fonction "
.href("http://php.net/manual/fr/function.file-get-contents.php","file_get_contents")." de ".$php."." ;
00631     
finp() ;
00632     
00633     
p
("texte") ;
00634     echo
"Le programme solution est "
.href("montresource.php?nomfic=emarge_csv.php","ici")." et fournit, pour le fichier exemple " ;
00635     echo
href
("emarge.txt").", la feuille d'&eacute;margement nomm&eacute;e ".href("emarge_php.csv").". " ;
00636     echo
" Il n'y a sans doute pas besoin de num&eacute;roter les noms et pr&eacute;noms, vu qu'Excel et Open Office Calc affichent syst&eacute;matiquement " ;
00637     echo
" des num&eacute;ros de ligne. Par contre le format des cellules laisse &agrave; d&eacute;sirer, d'o&ugrave; la r&eacute;ponse &agrave; la question suivante." ;
00638     
finp() ;
00639     
00640     
$numQue
++ ; h3("R&eacute;ponse ".$numExo.".".$numQue." : production d'un document $rtf pour $word via $php") ;
00641     
00642     
p
("texte") ;
00643     echo
"Un fichier au format "
.href("https://fr.wikipedia.org/wiki/Rich_Text_Format","RTF")." n'est jamais au fond qu'un fichier texte avec des marqueurs " ;
00644     echo
b
("{")." et ".b("}").". Le plus simple est sans doute de mettre au point sous Word la mise en forme souhait&eacute;e puis de " ;
00645     echo
" recopier l'en-t&ecirc;te (fixe) avant de programmer la partie variable (chacune des lignes du tableau)." ;
00646     
finp() ;
00647     
00648     
p
("texte") ;
00649     echo
"Le programme solution est "
.href("montresource.php?nomfic=emarge_rtf.php","ici")." et fournit, pour le fichier exemple " ;
00650     echo
href
("emarge.txt").", la feuille d'&eacute;margement nomm&eacute;e ".href("emarge_php.rtf").". " ;
00651     echo
"Dans la mesure o&ugrave; les balises "
.b("RTF")." sont &eacute;crites en minuscules, nous avons choisi de mettre dans " ;
00652     echo
" la partie variable les mots variables en majuscules (voir ci-dessous) " ;
00653     echo
" afin de pouvoir les remplacer facilement par les \"vrais\" noms et pr&eacute;noms." ;
00654     
finp() ;
00655     
00656     
pre_fichier
("milieu_emarge_rtf.txt","cadre") ;
00657     
00658     
$numQue
++ ; h3("R&eacute;ponse ".$numExo.".".$numQue." : production d'un document $latex via $perl") ;
00659     
00660     
p
("texte") ;
00661     echo
"Le programme solution est "
.href("montresource.php?nomfic=emarge_latex.pl","ici")." et fournit, pour le fichier exemple " ;
00662     echo
href
("emarge.txt").", la feuille d'&eacute;margement nomm&eacute;e ".href("lstemarge.pdf").". " ;
00663     echo
" Notre programme
$perl utilise des fonctions personnelles via le module " ;
00664     echo
" nomm&eacute; "
.href("strFuncs.pm").". " ;
00665     
finp() ;
00666     
00667     
$numQue
++ ; h3("R&eacute;ponse ".$numExo.".".$numQue." : production d'une liste d'&eacute;margement via une page Web") ;
00668     
00669     
p
("texte") ;
00670     echo
" Pour produire une \"vraie\" liste d'&eacute;margement utilisable, il faut sans doute " ;
00671     echo
" ajouter un titre autre que &laquo;liste emargement&raquo;, donner la possibilit&eacute; d'utiliser " ;
00672     echo
" la date du jour ou d'entrer la date &agrave; laquelle la liste doit &ecirc;tre remplie, offrir la " ;
00673     echo
" possibilit&eacute; d'ajouter quelques lignes vides pour des personnes en surnombre... " ;
00674     
finp() ;
00675     
00676     
finsolution() ;
00677     
finblockquote() ;
00678     
00679     
## -------------------------------------------------------------------------------------------
00680     
00681     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Liste de fonctions
00682     
00683     ## -------------------------------------------------------------------------------------------
00684     
00685     
blockquote() ;
00686     
$numQue
= 0 ;
00687     
blockquote() ;
00688     
00689     
$numQue
++ ; h3("Question ".$numExo.".".$numQue) ;
00690     
00691     
p
("texte") ;
00692     echo
"On dispose d'un code source, disons " ;
00693     echo
href
("strfun.zip","strfun.php")." et on veut la liste des fonctions du fichier, " ;
00694     echo
" par ordre alphab&eacute;tique, avec le num&eacute;ro de ligne du d&eacute;but de la fonction. " ;
00695     echo
" Quelle solution "
.b("rapide")." en ligne de commandes ".em("Unix")." peut-on utiliser" ;
00696     echo
"&nbsp;?" ;
00697     
finp() ;
00698     
00699     
p
("texte") ;
00700     echo
"Est-ce que les fonctions vectorielles de
$R fournissent une solution concise &agrave; ce probl&egrave;me" ;
00701     echo
"&nbsp;?" ;
00702     
finp() ;
00703     
00704     
$numQue
++ ; h3("Question ".$numExo.".".$numQue) ;
00705     
00706     
p
("texte") ;
00707     echo
"On veut maintenant un affichage &laquo;propre&raquo;, sans le mot "
.em("function") ;
00708     echo
" et avec un affichage format&eacute; des num&eacute;ros de ligne. De plus on voudrait disposer " ;
00709     echo
" de toutes les fonctions en cas d'utilisation d'un fichier "
.em("maitre") ;
00710     echo
" avec des "
.em("include")." ou des ".em("require").". On utilisera $perl." ;
00711     
#".href("http://www.skilly.com/mag/cli-php-en-ligne-commande/","PHP-cli")."." ;
00712     
finp() ;
00713     
00714     
p
("texte") ;
00715     echo
"Rajouter des sorties Word (RTF), PDF (LaTeX) et XHTML, le choix du format se faisant &agrave; l'aide d'un " ;
00716     echo
" param&egrave;tre "
.b("-o")." ou ".b("--output")."." ;
00717     
finp() ;
00718     
00719     
$numQue
++ ; h3("Question ".$numExo.".".$numQue) ;
00720     
00721     
p
("texte") ;
00722     echo
" Ce serait bien de disposer aussi d'exemples pour chaque fonction et de passer par un " ;
00723     echo
" affichage Web pour voir les fonctions &agrave; afficher. On impl&eacute;mentera comme " ;
00724     echo
" d'habitude cela dans une page Web valide pour "
.b("XHTML strict").". " ;
00725     
finp() ;
00726     
00727     
$numQue
++ ; h3("Question ".$numExo.".".$numQue) ;
00728     
00729     
p
("texte") ;
00730     echo
" Compl&eacute;ter le fichier "
.href("strfun.zip","strfun.php")." pour que la documentation soit " ;
00731     echo
" au format "
.b("Doxygen").". Quels sont les avantages et les inconv&eacute;nients de ".b("Doxygen") ;
00732     echo
" par rapport &agrave; ce que nous avons d&eacute;velopp&eacute;" ;
00733     echo
"&nbsp;?" ;
00734     
finp() ;
00735     
00736     
finblockquote() ;
00737     
00738     
solution
($numExo,$numSerie) ;
00739     
00740     
$numQue
= 0 ;
00741     
00742     
## --------------------------------------------------------------------------------
00743     
00744     
p
("texte") ;
00745     echo
"Pas encore&nbsp;! " ;
00746     echo
"A ce jour (2016), aucun &eacute;tudiant ni aucun internaute averti n'a fourni de solution compl&egrave;te satisfaisante." ;
00747     
finp() ;
00748     
00749     
p
("texte") ;
00750     echo
"Voici toutefois quelques &eacute;l&eacute;ments de r&eacute;ponse." ;
00751     
finp() ;
00752     
00753     
## --------------------------------------------------------------------------------
00754     
00755     
$numQue
++ ; h3("R&eacute;ponse ".$numExo.".$numQue -- Commandes ".em("Unix"),"gvert") ;
00756     
00757     
## --------------------------------------------------------------------------------
00758     
00759     
p
("texte") ;
00760     echo
"Pour trouver les num&eacute;ros de ligne d'un fichier correspondant &agrave; un mot particulier, " ;
00761     echo
" le syst&egrave;me "
.em("Unix")." fournit la commande ".b("grep")." avec le param&egrave;tre ".b("-n")."." ;
00762     echo
" On pourrait donc &eacute;crire pour d&eacute;tecter le mot "
.b("function")."&nbsp;:" ;
00763     
finp() ;
00764     
00765     
pre_fichier
("grep01.txt","cadre") ;
00766     
00767     
p
("texte") ;
00768     echo
"Afin d'&eacute;viter de renvoyer des lignes comme "
.b('"}&nbsp;#&nbsp;end&nbsp;of&nbsp;function"') ;
00769     echo
" qui contiennent aussi le mot "
.b("function").", on peut essayer de d&eacute;tecter ".b("function") ;
00770     echo
" &eacute;crit en d&eacute;but de ligne via le symbole "
.b("^")." dans l'expression r&eacute;guli&egrave;re de recherche"."&nbsp;:" ;
00771     
finp() ;
00772     
00773     
pre_fichier
("grep02.txt","cadre") ;
00774     
00775     
p
("texte") ;
00776     echo
"Malheureusement, s'il y a des espaces devant le mot "
.b("function")." les lignes correspondantes " ;
00777     echo
" ne seront pas trouv&eacute;es. Il vaut donc mieux &eacute;crire"
."&nbsp;:" ;
00778     
finp() ;
00779     
00780     
pre_fichier
("grep03.txt","cadre") ;
00781     
00782     
p
("texte") ;
00783     echo
"Voici le r&eacute;sultat de l'ex&eacute;cution de cette commande" ;
00784     
finp() ;
00785     
00786     
pre_fichier
("grep03_sor.txt","cadrejaune") ;
00787     
00788     
p
("texte") ;
00789     echo
"On trouvera " ;
00790     echo
href
("http://manpagesfr.free.fr/man/man1/grep.1.html","ici") ;
00791     echo
" une page d'aide compl&egrave;te sur "
.b("grep")." en fran&ccedil;ais." ;
00792     
finp() ;
00793     
00794     
p
("texte") ;
00795     echo
"Il faut maintenant trier les lignes affich&eacute;es et heureusement " ;
00796     echo
em
("Unix")." fournit la commande ".b("sort").". On pourrait penser utiliser la" ;
00797     echo
" redirection des sorties via le symbole "
.b("&gt;")." soit le code " ;
00798     
finp() ;
00799     
00800     
pre_fichier
("grep04.txt","cadre") ;
00801     
00802     
p
("texte") ;
00803     echo
"mais ce n'est pas la peine car il est possible de chainer les commandes " ;
00804     echo
" (la sortie d'une commande est l'entr&eacute;e de la suivante) via le symbole "
.b("|") ;
00805     echo
" nomm&eacute; "
.b("pipe")." en anglais -- tuyau en fran&ccedil;ais --"."&nbsp;:" ;
00806     
finp() ;
00807     
00808     
pre_fichier
("grep05.txt","cadre") ;
00809     
00810     
p
("texte") ;
00811     echo
b
("sort")." a bien effectu&eacute; un tri, mais ce n'est pas celui que nous voulions"."&nbsp;:" ;
00812     
finp() ;
00813     
00814     
pre_fichier
("grep05_sor.txt","cadrejaune") ;
00815     
00816     
p
("texte") ;
00817     echo
"En fait, "
.b("sort")." a tri&eacute; selon l'ordre alphab&eacute;tique des num&eacute;ros de ligne. Ce qu'on " ;
00818     echo
" voudrait, c'est trier selon le deuxi&egrave;me mot (ou champ ou cl&eacute;, "
.em("key")." en anglais). " ;
00819     echo
" Pour cela, il faut utiliser le param&egrave;tre "
.b("-k")."&nbsp;:" ;
00820     
finp() ;
00821     
00822     
pre_fichier
("grep06.txt","cadre") ;
00823     
00824     
p
("texte") ;
00825     echo
"Et voil&agrave; le travail"
."&nbsp;:" ;
00826     
finp() ;
00827     
00828     
pre_fichier
("grep06_sor.txt","cadrejaune") ;
00829     
00830     
p
("texte") ;
00831     echo
"On trouvera " ;
00832     echo
href
("http://manpagesfr.free.fr/man/man1/sort.1.html","ici") ;
00833     echo
" une page d'aide compl&egrave;te sur "
.b("sort")." en fran&ccedil;ais." ;
00834     
finp() ;
00835     
00836     
p
("texte") ;
00837     echo
"Ce n'est bien s&ucirc;r pas tr&egrave;s &laquo;propre&raquo;. " ;
00838     echo
" Pour avoir quelque chose de &laquo;bien beau, bien propre&raquo;, on peut " ;
00839     echo
" utiliser " ;
00840     echo
href
("http://marionpatrick.free.fr/man_html/html/gawk_1.html","gawk") ;
00841     echo
" par exemple avec le code suivant " ;
00842     
finp() ;
00843     
00844     
pre_fichier
("grep07.sh","cadre") ;
00845     
00846     
p
("texte") ;
00847     echo
"Le fichier awk correspondant, soit "
.href("grep07.awk").", vient juste " ;
00848     echo
" r&eacute;ordonner les informations, avec d'abord le nom de la fonction puis le num&eacute;ro de ligne, " ;
00849     echo
" avec des formatages adapt&eacute;s pour une meilleure lisibilit&eacute;&nbsp;:" ;
00850     
finp() ;
00851     
00852     
pre_fichier
("grep07.awk","cadre") ;
00853     
00854     
## --------------------------------------------------------------------------------
00855     
00856     
h3
("R&eacute;ponse ".$numExo.".$numQue -- Logiciel $R","gvert") ;
00857     
00858     
## --------------------------------------------------------------------------------
00859     
00860     
p
("texte") ;
00861     echo
"Le logiciel
$R dispose aussi d'une " ;
00862     echo
" fonction "
.hrrr("grep")." dans le package ".hrrp("base")." qui ressemble tr&egrave;s fortement " ;
00863     echo
" &agrave; la commande "
.em("Unix")." de m&ecirc;me nom. " ;
00864     echo
"Il suffit donc d'&eacute;crire, apr&egrave;s la lecture du fichier par "
.noir("lignes <- readLines(fichier)")." \n" ;
00865     
finp() ;
00866     
00867     
pre_fichier
("grep01.r","cadre") ;
00868     
00869     
p
("texte") ;
00870     
$bs
= "\\";
00871     
$pg
= "(";
00872     echo
"L'expression r&eacute;guli&egrave;re utilis&eacute;e ici "
.noir("^".$bs.$bs."s*+function")." est un tout petit peu plus compliqu&eacute;e \n" ;
00873     echo
"que la simple chaine "
.noir("^function")." \n" ;
00874     echo
"car \n" ;
00875     
finp() ;
00876     
00877     
ul() ;
00878     
00879     
debutli
() ; p() ;
00880     echo
"il peut y avoir plusieurs espaces entre "
.noir("^")." et ".noir("function")." \n" ;
00881     echo
"d'o&ugrave; la partie "
.noir("\\s*")."&nbsp;; \n" ;
00882     
finp
() ; finli() ;
00883     
00884     
debutli
() ; p() ;
00885     echo
"pour saisir un \"slash\" dans une expression r&eacute;guli&egrave;re, il faut doubler ce symbole, d'o&ugrave; "
.noir("\\\\s*")."&nbsp;; \n" ;
00886     
finp
() ; finli() ;
00887     
00888     
finul() ;
00889     
00890     
p
("texte") ;
00891     echo
"Si de plus on utilise le param&egrave;tre "
.noir("value")." avec la valeur ".noir("TRUE")." dans l'appel de " ;
00892     echo
" la fonction "
.hrrr("grep") ;
00893     echo
",
$R renvoie la chaine d&eacute;tect&eacute;e. Voici ce qu'on \n" ;
00894     echo
"peut donc facilement obtenir avec
$R juste avec ".noir("grep()")." et l'expression r&eacute;guli&egrave;re&nbsp;: \n" ;
00895     
finp() ;
00896     
00897     
pre_fichier
("grep_r02.txt","cadre") ;
00898     
00899     
p
("texte") ;
00900     echo
"Pour ne garder que le deuxi&egrave;me mot de chaque ligne trouv&eacute;e, on peut utiliser une fonction \n" ;
00901     echo
"anonyme. Voici donc le texte complet de la fonction qui construit la liste des fonctions d'un fichier-script&nbsp;: \n" ;
00902     
finp() ;
00903     
00904     
pre_fichier
("grep_fonctions.r","cadre") ;
00905     
00906     
p
("texte") ;
00907     echo
"Et le rendu est bien conforme &agrave; ce qu'on voulait \n" ;
00908     
finp() ;
00909     
00910     
pre_fichier
("grep_fonctions_sor.txt","cadrejaune") ;
00911     
00912     
## --------------------------------------------------------------------------------
00913     
00914     
$numQue
++ ; h3("R&eacute;ponse ".$numExo.".$numQue -- Programmation $perl","gvert") ;
00915     
00916     
## --------------------------------------------------------------------------------
00917     
00918     
p
("texte") ;
00919     echo
"D&eacute;tecter le mot function en d&eacute;but de ligne n'est vraiment un probl&egrave;me en
$perl. " ;
00920     echo
" Par contre pour passer en revue "
.b("transitivement")." tous les ".em("include")." et " ;
00921     echo
" "
.em("require")." demande un toutpetit peu plus de r&eacute;flexion. Voici le code complet&nbsp;:" ;
00922     
finp() ;
00923     
00924     
pre_fichier
("ldfPhp.pl","cadrebleu") ;
00925     
00926     
p
("texte") ;
00927     echo
"Voici un exemple de sortie pour la page Web qui correspond &agrave; l'URL "
.href("../Shspdb/","Shspdb/index.php")."..." ;
00928     
finp() ;
00929     
00930     
textarea_fichier
("ldfphp","cadrejaune",30,120,"ldf","ldfPhp.sor"," ") ;
00931     
00932     
$numQue
++ ; h3("R&eacute;ponse ".$numExo.".$numQue -- Programmation $php, fonctions et exemples","gvert") ;
00933     
00934     
p
("texte") ;
00935     
$url1
= "http://forge.info.univ-angers.fr/~gh/internet/stdphp.php" ;
00936     
$url2
= "http://www.info.univ-angers.fr/~gh/wstat/statghfns.php" ;
00937     echo
"Nous avons d&eacute;j&agrave; vu, avec "
.href($url1,"std.php")." et ".href($url2,"statgh.r") ;
00938     echo
" des exemples d'une telle page. Pour batir une telle interface, il faut bien s&ucirc;r deux fichiers, " ;
00939     echo
" celui du programme source, par exemple "
.href("std.php")." et celui des exemples, comme ".href("stdphp.cmp") ;
00940     echo
" pour les fonctions
$php, les fichiers ".href("statgh.r")." et ".href("statgh.xmp")." pour les fonctions $R." ;
00941     echo
" Le code-source de chaque page est consultable via un lien en bas de chaque page. Il est court parce qu'il n'y a " ;
00942     echo
" au d&eacute;part pas grand-chose &agrave; faire, &agrave; savoir construire un &eacute;l&eacute;ment "
.b("textarea")." &agrave; gauche de la page avec la " ;
00943     echo
" liste alphab&eacute;tique des fonctions, l'affichage pour chaque fonction &eacute;tant g&eacute;r&eacute; par "
.b("Javascript").". " ;
00944     
finp() ;
00945     
00946     
p
("texte") ;
00947     echo
" Chaque fonction est consultable via l'url de la page et le param&egrave;tre "
.b("lafns").". Ainsi, avec l'URL " ;
00948     
finp() ;
00949     
00950     
pre
("cadre") ;
00951      echo
b
(" http://forge.info.univ-angers.fr/~gh/internet/stdphp.php?lafns=entetesTableau") ;
00952     
finpre() ;
00953     
00954     
p
("texte") ;
00955     echo
"il est possible d'arriver directement &agrave; l'affichage de la fonction "
.b("entetesTableau").". " ;
00956     
finp() ;
00957     
00958     
p
("texte") ;
00959     echo
"Comment &ecirc;tre s&ucirc;r que chaque fonction est document&eacute;e, c'est-&agrave;-dire qu'elle a au moins un exemple&nbsp;?" ;
00960     echo
" Un simple programme
$php pour coupler les noms de fonctions d&eacute;finies et les appels de fonctions doit suffire, soit par " ;
00961     echo
" exemple le programme
$php nomm&eacute; ".b("stdphp_check.php")." suivant qui s'ex&eacute;cute en liugne de commande&nbsp;:" ;
00962     
finp() ;
00963     
00964     
pre_fichier
("stdphp_check.php","cadre") ;
00965     
00966     
## --------------------------------------------------------------------------------
00967     
00968     
$numQue
++ ; h3("R&eacute;ponse ".$numExo.".$numQue -- Documentation Doxygen","gvert") ;
00969     
00970     
## --------------------------------------------------------------------------------
00971     
00972     
p
("texte") ;
00973     echo
b
("Doxygen")." est un syst&egrave;me de g&eacute;n&eacute;ration automatique de documentation via des codes sp&eacute;ciaux dans les commentaires. " ;
00974     echo
" Le site officiel est "
.href("http://www.stack.nl/~dimitri/doxygen/","ici") ;
00975     echo
" et un tutoriel en fran&ccedil;ais "
.href("http://axiomcafe.fr/tutoriel-documenter-un-code-avec-doxygen","l&agrave;").". " ;
00976     
finp() ;
00977     
00978     
finsolution() ;
00979     
00980     
finblockquote() ;
00981     
00982     
## -------------------------------------------------------------------------------------------
00983     
00984     
p() ;
00985     echo
href
("montresource.php?nomfic=pagsd3.php","Code-source de cette page","orange_stim nou")."&nbsp;;&nbsp;" ;
00986     echo
" fichiers inclus&nbsp;: "
.href("montresource.php?nomfic=pagsd_inc.php","pagsd_inc.php","orange_stim nou") ;
00987     echo
" et "
.href("montresource.php?nomfic=pagsd.js","pagsd.js","orange_stim nou")."." ;
00988     
finp() ;
00989     
00990     
finSection() ;
00991     
finPage() ;
00992     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)