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 
;
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 
;
00059     $numExo   
;
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 
;
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 
;
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 
;
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 
;
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 
;
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)