OVH Cloud OVH Cloud

substitution dans des fichiers

24 réponses
Avatar
Nicolas Pontoizeau
Bonjour,

J'ai fait un menu pour un site web et maintenant je souhaite recopier ce
menu sur toutes les pages de mon site.

Existe-t-il un moyen pour copier tout ce qui se trouve entre les
commentaires :

<!-- here starts the menu-->

<div id="topmenu">

<div id="menu">
[...]
</div><!--menu-->
</div><!--topmenu-->

<!-- here end the menu-->

et de mettre à jour tout le contenu des pages du site entre les
commentaires :
<!-- here starts the menu-->
[...]
<!-- here end the menu--> ?

J'ai pensé à perl car ça ressemble à :
for i in *.htm; do perl -pe "s/htm/php/g" -i $i; done
qui me permet de remplacer html par php mais là c'est un plus complexe
et je connais très mal perl.

Merci d'avance,

--
http://www.nicolas.pontoizeau.org/
Nicolas Pontoizeau - Promotion EFREI 2005

10 réponses

1 2 3
Avatar
Nicolas Pontoizeau
? Non je pense qu'il voulait dire de mettre dans la page :

#include "menu.txt"

puis de faire :
$cpp svc_bdrp.html > svc_bdrpc.html
svc_bdrp.html:70:186: caractère ' de terminaison manquant

Bon là je viens de tester avec cpp le processeur de texte du C dispo
partout je pense (même sous windows non?). Quelques truc à regler (là
encore je comprends pas le message d'erreur) mais sinon ça fait bien le
boulot en rajoutant quelques commentaires parasites en début et fin
d'include.


J'ai essayé un autre processeur : gpp
http://auroux.free.fr/prog/gpp.html

et cette fois même syntaxe fait exactement ce que je veux sans parasite
ni message d'erreur. Bien sûr si quelqu'un sait explique pourquoi cpp
rechigne, je prends aussi.

--
http://www.nicolas.pontoizeau.org/
Nicolas Pontoizeau - Promotion EFREI 2005

Avatar
Nicolas George
Nicolas Pontoizeau wrote in message
<slrnd5vei7.oji.pontoize*NOSPAM*@choam.unix.efrei.fr>:
? Non je pense qu'il voulait dire de mettre dans la page :

#include "menu.txt"

puis de faire :
$cpp svc_bdrp.html > svc_bdrpc.html



Non, je ne crois pas. Il a parlé de ssi, ce qui désigne, à mon avis,
<URL: http://httpd.apache.org/docs-2.0/howto/ssi.html > : mettre

<!--#include virtual="foobar.html" -->

et laisser Apache se débrouiller pour inclure footer.html à la place.

svc_bdrp.html:70:186: caractère ' de terminaison manquant

Bon là je viens de tester avec cpp le processeur de texte du C dispo
partout je pense (même sous windows non?). Quelques truc à regler (là
encore je comprends pas le message d'erreur) mais sinon ça fait bien le
boulot en rajoutant quelques commentaires parasites en début et fin
d'include.



Le préprocesseur C est adapté à la syntaxe du C. En particulier, si on
écrit :

#define HELLO WORLD
char *hello = "HELLO";

après passage du préprocesseur, on garde :

char *hello = "HELLO";

car HELLO apparaît entre guillemets. Pour ça, le préprocesseur doit garder
trace des guillemets. Mais attention, « '"' » n'est pas un guillemet qui
délimite une chaîne de caractères, donc le préprocesseur doit également
garder trace des apostrophes, qui viennent toujours par paire, ce qui est
rarement le cas dans un texte en français.

J'ai essayé un autre processeur : gpp
http://auroux.free.fr/prog/gpp.html


Tiens, coucou MXK :)


Avatar
kurtz le pirate
In article <slrnd5vapp.oji.pontoize*NOSPAM*@choam.unix.efrei.fr>,
Nicolas Pontoizeau <pontoize*NOSPAM*@Efrei.fr.invalid> wrote:

pourquoi ne pas utiliser ssi plutot que perl ?
tu fais un include de ton fichier texte qui contient ton menu


Oui c'est une bonne idée! Mais qu'est ce que c'est ssi? J'ai pas trouvé
dans le cache debian. C'est un preprocesseur de texte ou un truc du
style?



ssi : Server Side Include.

tu as de la doc la : http://httpd.apache.org/docs/howto/ssi.html
et la : http://www.w3.org/Jigsaw/Doc/User/SSI.html


le principe est simple :
- tu as un fichier texte avec ton menu par exemple : menu.txt
- dans tes pages Shtml tu ajoutes ce menu avec le code :

<html>
<head>...</head>
<body>
...
...
<!--#include virtual="menu.txt"-->
...
...
...
</body>
</html>

tu as donc 1 seul fichier "menu.txt" pour tout ton site mais tu peux
l'inclure dans autant de page que tu veux.

c'est plus clair ?
klp



Avatar
DoMinix
Nicolas Pontoizeau wrote:


"Nicolas Pontoizeau" <pontoize*NOSPAM*@Efrei.fr.invalid> a écrit dans le
message de news: slrnd5tbrd.q7l.pontoize*NOSPAM*@choam.unix.efrei.fr...
...

L'idée est simple : je fais une fois le menu correctement et ensuite je
voudrais le recopier sur toutes les pages du site. Pour cela j'ai mis
des commentaires comme marque de repère. Si ça ne tenait que sur une
ligne on pourrait faire un truc du style :
perl -pi -e 's/<!-- here starts the menu--> rien <!-- here end the
menu-->/
<!-- here starts the menu--> [tout le code du menu] <!-- here end the
menu-->/g' /rep/*.html

Je sais pas si c'est plus clair...





c'est plus clair,
tu doit pouvoir faire cela en mode slurp
genre : attention c'est gready :



perl -p00i~ -e 's/<!-- here starts the menu-->.*<!-- here end the menu-->/
<!-- here starts the menu-->$ToutLeCode<!-- here end the menu-->/gm'



j'ai testé (je passe le fichier a traiter en argument) est ça m'a rien donné :

#!/bin/bash

CODE=$(cat menu.txt)

perl -p00i~ -e 's/<!-- here starts the menu-->.*<!-- here end the menu-->/$CODE/gm' $1

mais c'est sûrement pas la meilleure technique en y réfléchissant...



$CODE n'est pas interpreté par le shell a cause de <'>
essaye cela
#!/bin/bash
perl -p00i~ -e 'BEGIN{CODE=`cat menu.txt`};s/<!-- here starts the
menu-->.*<!-- here end the menu-->/$CODE/gm' $1

ou cela
CODE=$(cat menu.txt)
perl -p00i~ -e "s/<!-- here starts the menu-->.*<!-- here end the
menu-->/$CODE/gm" $1

--
dominix



Avatar
DoMinix
DoMinix wrote:
Nicolas Pontoizeau wrote:



"Nicolas Pontoizeau" <pontoize*NOSPAM*@Efrei.fr.invalid> a écrit dans
le message de news:
slrnd5tbrd.q7l.pontoize*NOSPAM*@choam.unix.efrei.fr...
...

L'idée est simple : je fais une fois le menu correctement et ensuite je
voudrais le recopier sur toutes les pages du site. Pour cela j'ai mis
des commentaires comme marque de repère. Si ça ne tenait que sur une
ligne on pourrait faire un truc du style :
perl -pi -e 's/<!-- here starts the menu--> rien <!-- here end the
menu-->/
<!-- here starts the menu--> [tout le code du menu] <!-- here end
the menu-->/g' /rep/*.html

Je sais pas si c'est plus clair...





c'est plus clair,
tu doit pouvoir faire cela en mode slurp
genre : attention c'est gready :




perl -p00i~ -e 's/<!-- here starts the menu-->.*<!-- here end the
menu-->/
<!-- here starts the menu-->$ToutLeCode<!-- here end the menu-->/gm'




j'ai testé (je passe le fichier a traiter en argument) est ça m'a rien
donné :

#!/bin/bash

CODE=$(cat menu.txt)

perl -p00i~ -e 's/<!-- here starts the menu-->.*<!-- here end the
menu-->/$CODE/gm' $1

mais c'est sûrement pas la meilleure technique en y réfléchissant...



$CODE n'est pas interpreté par le shell a cause de <'>
essaye cela
#!/bin/bash
perl -p00i~ -e 'BEGIN{CODE=`cat menu.txt`};s/<!-- here starts the
OOPS ^manque "$" la



menu-->.*<!-- here end the menu-->/$CODE/gm' $1

ou cela
CODE=$(cat menu.txt)
perl -p00i~ -e "s/<!-- here starts the menu-->.*<!-- here end the
menu-->/$CODE/gm" $1






Avatar
Emmanuel Florac
Le Fri, 15 Apr 2005 12:42:49 +0000, Nicolas Pontoizeau a écrit :


readline() on closed filehandle TT at /usr/local/bin/genhtml.pl line 14.
impossible d'écrire 'autogen/svc_bdrp.html'! at /usr/local/bin/genhtml.pl line 26.

Là je comprends pas (ça vient surement du fait que je n'ai jamais fait de perl)


Ah ben oui ça ne va pas aider :) Bon, le script en question cherche trois
fichiers : part.footer.html, part.header.html, et part.menu.html. Il
remplace la balise %FOOTER% par le contenu du fichier "footer", etc.

Tu peux enlever dans le hash %parms les lignes dont tu n'as pas besoin (
'header' => '' et 'footer' => '') ou en rajouter à ta guise.

Sinon l'erreur à la fin, c'est qu'il essaie d'écrire le fichier
résultant dans un sous-dossier "autogen" pour éviter de tout mélanger...
remplace "autogen" par ce que tu voudras, mais n'écris pas "sur place"
sinon ça va écraser tes templates!


--
Sutor ne ultra Crepidam.

Avatar
Emmanuel Florac
Le Fri, 15 Apr 2005 13:15:13 +0000, Nicolas Pontoizeau a écrit :


Bon là je viens de tester avec cpp le processeur de texte du C dispo
partout je pense (même sous windows non?).


Tu rigoles? un préprocesseur C sous windows, il faut avoir un IDE genre
VisualStudio installé! tss tss...

Bon c'est quand même plus simple d'utiliser mon script de 10 lignes, si
tu veux mon avis...

--
Quidquid latine dictum sit, altum sonatur

Avatar
Nicolas Pontoizeau
ssi : Server Side Include.

tu as de la doc la : http://httpd.apache.org/docs/howto/ssi.html
et la : http://www.w3.org/Jigsaw/Doc/User/SSI.html


Merci je jeterai un ½il.

c'est plus clair ?


Oui (pas la peine de s'enerver)

--
http://www.nicolas.pontoizeau.org/
Nicolas Pontoizeau - Promotion EFREI 2005

Avatar
Nicolas Pontoizeau
Sinon l'erreur à la fin, c'est qu'il essaie d'écrire le fichier
résultant dans un sous-dossier "autogen" pour éviter de tout mélanger...
remplace "autogen" par ce que tu voudras, mais n'écris pas "sur place"
sinon ça va écraser tes templates!


Ok maintenant que je le sais c'est évident en lisant le code. Merci il
est bien efficace ce script aussi :)

--
http://www.nicolas.pontoizeau.org/
Nicolas Pontoizeau - Promotion EFREI 2005

Avatar
Nicolas Pontoizeau
$CODE n'est pas interpreté par le shell a cause de <'>
essaye cela
#!/bin/bash
perl -p00i~ -e 'BEGIN{CODE=`cat menu.txt`};s/<!-- here starts the
OOPS ^manque "$" la



perl -p00i~ -e 'BEGIN{$CODE=`cat menu.txt`};s/<!-- here starts the menu-->.*<!-- here end the menu-->/$CODE/gm' svc_bdrp.html

Je sais pas si tu as tester mais chez moi ça marche pas.

--
http://www.nicolas.pontoizeau.org/
Nicolas Pontoizeau - Promotion EFREI 2005


1 2 3